eduardweb.
WooCommerce & WordPressIntermediar#wordpress#woocommerce#graphql#headless#acf

CPT și ACF în WordPress headless: cum le expui curat în API

De Delia Petre, 11 iul. 2026 · 10 vizualizări · 3 like-uri

Postat 11 iul. 2026
php
add_action('init', function() {
    register_post_type('producator', [
        'label' => 'Producători',
        'public' => true,
        'show_in_rest' => true, // Esențial pentru REST API
        'rest_base' => 'producatori',
        'show_in_graphql' => true, // Esențial pentru WPGraphQL
        'graphql_single_name' => 'producator',
        'graphql_plural_name' => 'producatori',
        'supports' => ['title', 'editor', 'thumbnail'],
        'taxonomies' => [],
    ]);
});

Am lucrat recent la un magazin WooCommerce headless și m-am lovit din nou de clasica problemă: cum trimiți datele din Custom Post Types (CPT) și Advanced Custom Fields (ACF) către React sau Next.js fără să explodeze payload-ul API-ului. WordPress e un CMS excelent pentru editori, dar pe partea de API livrează, by default, tone de metadate inutile de care front-end-ul tău n- are nevoie.

Problema cu abordarea default

La un magazin de piese auto cu peste 12.000 de produse, aveam un CPT numit „Producători” (brands) legat de produsele din WooCommerce printr-o relație ACF. La început, echipa a mers pe varianta simplă: un plugin care arunca tot obiectul ACF direct în REST API.

Rezultatul? Endpoint-ul de produse returna un JSON uriaș de 4MB. Timpul de răspuns pe server sărea lejer de 1.8 secunde. Nimic nu e mai dăunător pentru conversii decât un magazin care se mișcă în reluare.

Calea REST: Filtrare agresivă

Dacă proiectul tău folosește REST API, regula de aur este să nu folosești plugin-uri automate care expun ACF direct. Scrie-ți propriile endpoint-uri sau filtrează masiv răspunsul folosind register_rest_field.

Merge excelent pentru că poți formata datele exact în structura pe care o vrea front-end-ul. În loc să trimiți 50 de câmpuri din ACF de care nu te atingi, trimiți doar cele 3-4 stringuri necesare. Trade-off-ul? Trebuie să scrii cod de boilerplate pentru fiecare câmp nou adăugat în CMS.

Calea GraphQL: WPGraphQL și ACF Schema

Pentru proiectele medii și mari, GraphQL câștigă detașat. Folosind WPGraphQL și WPGraphQL for ACF, obții un control granular. Front-end-ul cere doar brandName și brandLogo, iar WordPress compilează doar acele date.

La magazinul de piese auto, trecerea la GraphQL ne-a redus timpul de încărcare al paginii de produs cu peste 40%. Interogările SQL s-au redus dramatic deoarece GraphQL nu încarcă restul de metadate din wp_postmeta dacă nu le-ai cerut explicit în query.

Totuși, există un trade-off destul de serios. Ecosistemul WPGraphQL se bazează pe multe plugin-uri comunitare. Când WordPress sau ACF fac un update major, riști să îți crape schema de GraphQL pe producție dacă nu ești atent la update-uri.

Cum înregistrezi CPT-ul curat

Nu folosi plugin-uri gen CPT UI doar pentru a bifa niște opțiuni. Înregistrează CPT-ul direct în functions.php sau într-un plugin custom de funcționalități. Cheia este să activezi corect suportul pentru REST și GraphQL direct din cod, așa cum am făcut în exemplul de mai jos.

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

Doar membrii comunității pot lăsa comentarii.