{"id":167172,"date":"2025-06-30T09:00:00","date_gmt":"2025-06-30T09:00:00","guid":{"rendered":"https:\/\/gtechgroup.it\/blog\/acf-gutenberg-blocchi-custom-campi\/"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T22:00:00","slug":"acf-gutenberg-blocchi-custom-campi","status":"publish","type":"post","link":"https:\/\/gtechgroup.it\/blog\/acf-gutenberg-blocchi-custom-campi\/","title":{"rendered":"ACF e Gutenberg: Blocchi Custom con Campi Personalizzati"},"content":{"rendered":"<h2>ACF e Gutenberg: L&#8217;Integrazione che Conta<\/h2>\n<p>L&#8217;editor a blocchi di WordPress, conosciuto come <strong>Gutenberg<\/strong>, ha trasformato radicalmente il modo in cui i contenuti vengono creati e gestiti in WordPress. Dalla sua introduzione con WordPress 5.0, Gutenberg &#232; diventato l&#8217;editor predefinito e il futuro della piattaforma. Per gli sviluppatori che utilizzano ACF, la domanda chiave &#232; stata: come integrare i campi personalizzati con il nuovo paradigma dei blocchi? La risposta di ACF &#232; stata brillante: la creazione di <strong>ACF Blocks<\/strong>, una funzionalit&#224; che permette di registrare blocchi Gutenberg personalizzati utilizzando i familiari campi ACF e i template PHP, senza dover scrivere una singola riga di React o JavaScript.<\/p>\n<p>I blocchi ACF rappresentano il ponte perfetto tra il mondo dei campi personalizzati e il mondo dell&#8217;editor a blocchi. Permettono di creare blocchi con un&#8217;interfaccia di editing basata sui campi ACF (che gli utenti gi&#224; conoscono) e un&#8217;anteprima in tempo reale nell&#8217;editor Gutenberg (che migliora enormemente l&#8217;esperienza utente rispetto al Flexible Content tradizionale). In questo articolo vedremo come registrare e configurare i blocchi ACF, come creare i template di rendering e come gestire gli aspetti avanzati di questa integrazione.<\/p>\n<h2>Come Funzionano i Blocchi ACF<\/h2>\n<p>I blocchi ACF funzionano in modo fondamentalmente diverso dai blocchi Gutenberg nativi. I blocchi nativi sono costruiti con React e salvano il loro contenuto direttamente nel post_content come HTML commentato. I blocchi ACF, invece, sono costruiti con <strong>PHP<\/strong> e salvano i dati come <strong>metadati<\/strong> del post (nella tabella wp_postmeta), esattamente come qualsiasi altro campo ACF. Il rendering del blocco avviene lato server tramite un template PHP, sia nell&#8217;editor (come anteprima) sia nel frontend.<\/p>\n<p>Questa architettura ha vantaggi significativi. Non devi imparare React per creare blocchi personalizzati: se sai usare ACF e scrivere template PHP, sai gi&#224; tutto il necessario. I dati dei blocchi sono accessibili tramite le funzioni standard di ACF (<code>get_field()<\/code>, <code>the_field()<\/code>), rendendoli compatibili con le query WP e i tool di migrazione esistenti. L&#8217;anteprima nell&#8217;editor &#232; generata dallo stesso template PHP usato nel frontend, garantendo una corrispondenza perfetta tra ci&#242; che l&#8217;utente vede nell&#8217;editor e ci&#242; che appare sul sito.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/05\/acf-01-groups.png\" alt=\"Gestione dei blocchi ACF e dei gruppi di campi in WordPress Gutenberg\" \/><\/p>\n<h2>Registrare un Blocco ACF<\/h2>\n<p>La registrazione di un blocco ACF avviene tramite la funzione <code>acf_register_block_type()<\/code> nel file <code>functions.php<\/code> del tema. Ecco un esempio completo di registrazione di un blocco &#8220;Testimonial&#8221;:<\/p>\n<pre><code>&lt;?php\nadd_action(acf\/init, registra_blocchi_acf);\nfunction registra_blocchi_acf() {\n    if( function_exists(acf_register_block_type) ) {\n\n        acf_register_block_type(array(\n            name              =&gt; testimonial,\n            title             =&gt; Testimonial,\n            description       =&gt; Blocco per mostrare una testimonianza cliente.,\n            render_template   =&gt; template-parts\/blocks\/testimonial.php,\n            category          =&gt; formatting,\n            icon              =&gt; format-quote,\n            keywords          =&gt; array(testimonial, citazione, recensione),\n            mode              =&gt; preview,\n            supports          =&gt; array(\n                align =&gt; true,\n                mode  =&gt; true,\n            ),\n        ));\n    }\n}\n?&gt;<\/code><\/pre>\n<p>I parametri principali sono: <strong>name<\/strong> (identificativo univoco del blocco, senza spazi), <strong>title<\/strong> (nome visibile nell&#8217;inseritore di blocchi), <strong>description<\/strong> (descrizione mostrata nel pannello di dettaglio), <strong>render_template<\/strong> (percorso del file PHP per il rendering), <strong>category<\/strong> (categoria nell&#8217;inseritore di blocchi), <strong>icon<\/strong> (icona Dashicons o SVG personalizzata) e <strong>keywords<\/strong> (parole chiave per la ricerca nell&#8217;inseritore).<\/p>\n<p>Il parametro <strong>mode<\/strong> &#232; particolarmente importante: <code>preview<\/code> mostra l&#8217;anteprima del blocco nell&#8217;editor con i campi ACF nel pannello laterale; <code>edit<\/code> mostra i campi ACF inline nel blocco; <code>auto<\/code> alterna automaticamente tra preview e edit in base all&#8217;interazione dell&#8217;utente. Il modo <code>preview<\/code> &#232; generalmente il pi&#249; apprezzato perch&#233; offre la migliore esperienza visuale.<\/p>\n<h2>Creare il Template di Rendering<\/h2>\n<p>Il template di rendering &#232; un file PHP standard che utilizza le funzioni ACF per recuperare e visualizzare i valori dei campi. Crea il file <code>template-parts\/blocks\/testimonial.php<\/code> nel tuo tema:<\/p>\n<pre><code>&lt;?php\n$nome = get_field(nome_cliente);\n$ruolo = get_field(ruolo);\n$citazione = get_field(citazione);\n$foto = get_field(foto_cliente);\n\n\/\/ Supporto per classi CSS e allineamento\n$className = testimonial-block;\nif( !empty($block[className]) ) {\n    $className .=   . $block[className];\n}\nif( !empty($block[align]) ) {\n    $className .=  align . $block[align];\n}\n?&gt;\n\n&lt;div class=\"&lt;?php echo esc_attr($className); ?&gt;\"&gt;\n    &lt;?php if($foto): ?&gt;\n        &lt;img class=\"testimonial-photo\"\n             src=\"&lt;?php echo esc_url($foto[sizes][thumbnail]); ?&gt;\"\n             alt=\"&lt;?php echo esc_attr($foto[alt]); ?&gt;\" \/&gt;\n    &lt;?php endif; ?&gt;\n\n    &lt;?php if($citazione): ?&gt;\n        &lt;blockquote&gt;&lt;?php echo wp_kses_post($citazione); ?&gt;&lt;\/blockquote&gt;\n    &lt;?php endif; ?&gt;\n\n    &lt;div class=\"testimonial-author\"&gt;\n        &lt;?php if($nome): ?&gt;\n            &lt;strong&gt;&lt;?php echo esc_html($nome); ?&gt;&lt;\/strong&gt;\n        &lt;?php endif; ?&gt;\n        &lt;?php if($ruolo): ?&gt;\n            &lt;span&gt;&lt;?php echo esc_html($ruolo); ?&gt;&lt;\/span&gt;\n        &lt;?php endif; ?&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/05\/acf-02-newgroup.png\" alt=\"Configurazione dei campi ACF per un blocco Gutenberg personalizzato\" \/><\/p>\n<p>Nota come il template accede alla variabile <code>$block<\/code>, che &#232; un array automaticamente disponibile nei template dei blocchi ACF contenente informazioni sul blocco corrente: nome, ID univoco, classi CSS personalizzate, allineamento e altre propriet&#224;. Questa variabile ti permette di gestire le opzioni di blocco standard di Gutenberg (allineamento, classi aggiuntive) senza codice aggiuntivo.<\/p>\n<h2>Associare i Campi al Blocco<\/h2>\n<p>Dopo aver registrato il blocco, devi creare un gruppo di campi ACF e associarlo al blocco tramite le Location Rules. Vai su <strong>ACF &gt; Field Groups<\/strong>, crea un nuovo gruppo e nella sezione Location imposta la regola: <strong>Block &#232; uguale a Testimonial<\/strong> (o il nome del tuo blocco). Aggiungi i campi che il blocco utilizzer&#224;: nel nostro esempio, un campo Text &#8220;Nome Cliente&#8221;, un campo Text &#8220;Ruolo&#8221;, un campo Text Area &#8220;Citazione&#8221; e un campo Image &#8220;Foto Cliente&#8221;.<\/p>\n<p>Quando l&#8217;utente inserisce il blocco nell&#8217;editor Gutenberg, i campi ACF appaiono nel pannello laterale (in modalit&#224; preview) o direttamente nel blocco (in modalit&#224; edit). L&#8217;utente compila i campi e il blocco mostra immediatamente l&#8217;anteprima renderizzata dal template PHP. Questa esperienza &#232; superiore sia al Classic Editor con ACF tradizionale (dove non c&#8217;&#232; anteprima) sia ai blocchi Gutenberg nativi (dove serve React per lo sviluppo).<\/p>\n<h2>Stili CSS per i Blocchi ACF<\/h2>\n<p>Per applicare stili CSS ai blocchi ACF, puoi utilizzare diversi approcci. Il pi&#249; semplice &#232; aggiungere gli stili nel foglio di stile principale del tema (<code>style.css<\/code>), utilizzando la classe base del blocco come selettore. Un approccio pi&#249; modulare &#232; specificare un foglio di stile dedicato per ogni blocco tramite il parametro <code>enqueue_style<\/code> nella registrazione:<\/p>\n<pre><code>acf_register_block_type(array(\n    name          =&gt; testimonial,\n    title         =&gt; Testimonial,\n    render_template =&gt; template-parts\/blocks\/testimonial.php,\n    enqueue_style =&gt; get_template_directory_uri() . \/css\/blocks\/testimonial.css,\n    \/\/ ... altri parametri\n));<\/code><\/pre>\n<p>Il vantaggio di <code>enqueue_style<\/code> &#232; che il CSS viene caricato solo nelle pagine che effettivamente utilizzano il blocco, ottimizzando le performance. Lo stesso vale per <code>enqueue_script<\/code> se il blocco necessita di JavaScript (ad esempio, per uno slider o un&#8217;animazione). Entrambi i file vengono automaticamente caricati sia nel frontend sia nell&#8217;editor Gutenberg, garantendo la coerenza visiva tra anteprima e risultato finale.<\/p>\n<h2>Funzionalit&#224; Avanzate: InnerBlocks e JSX<\/h2>\n<p>I blocchi ACF supportano <strong>InnerBlocks<\/strong>, una funzionalit&#224; di Gutenberg che permette di annidare altri blocchi all&#8217;interno del tuo blocco personalizzato. Per abilitare InnerBlocks, aggiungi il supporto nella registrazione del blocco e inserisci il tag <code>&lt;InnerBlocks \/&gt;<\/code> nel template:<\/p>\n<pre><code>\/\/ Nella registrazione:\nsupports =&gt; array(\n    jsx =&gt; true, \/\/ Abilita il rendering JSX per InnerBlocks\n),\n\n\/\/ Nel template PHP:\n&lt;div class=\"my-block\"&gt;\n    &lt;h2&gt;&lt;?php the_field(titolo); ?&gt;&lt;\/h2&gt;\n    &lt;InnerBlocks \/&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>InnerBlocks &#232; potente per creare blocchi &#8220;contenitore&#8221; come sezioni con sfondo personalizzato, colonne con stile specifico o card con header ACF e contenuto libero. L&#8217;utente pu&#242; inserire qualsiasi blocco Gutenberg (paragrafi, immagini, liste, video) nell&#8217;area InnerBlocks, mentre i campi ACF gestiscono le propriet&#224; del contenitore.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/05\/acf-03-tools.png\" alt=\"Strumenti avanzati ACF per la creazione di blocchi Gutenberg personalizzati\" \/><\/p>\n<h2>Gestire la Modalit&#224; Preview ed Edit<\/h2>\n<p>Il parametro <code>mode<\/code> nella registrazione del blocco controlla il comportamento predefinito, ma l&#8217;utente pu&#242; alternare tra le modalit&#224; in qualsiasi momento (se il supporto <code>mode =&gt; true<\/code> &#232; attivo). In modalit&#224; <strong>Preview<\/strong>, il blocco mostra l&#8217;anteprima renderizzata dal template PHP e i campi ACF appaiono nel pannello laterale dell&#8217;editor. In modalit&#224; <strong>Edit<\/strong>, i campi ACF vengono mostrati inline nel blocco, sostituendo l&#8217;anteprima.<\/p>\n<p>La modalit&#224; Preview &#232; ideale per blocchi visivamente complessi dove l&#8217;anteprima &#232; importante (hero banner, card, testimonial). La modalit&#224; Edit &#232; preferibile per blocchi semplici con pochi campi dove l&#8217;editing inline &#232; pi&#249; veloce. Puoi anche gestire programmaticamente il comportamento del blocco quando non ha ancora dati: mostrando un placeholder o un messaggio di istruzione quando i campi sono vuoti.<\/p>\n<pre><code>&lt;?php if( empty(get_field(titolo)) &amp;&amp; empty(get_field(contenuto)) ): ?&gt;\n    &lt;div class=\"block-placeholder\"&gt;\n        &lt;p&gt;Compila i campi nel pannello laterale per configurare questo blocco.&lt;\/p&gt;\n    &lt;\/div&gt;\n&lt;?php else: ?&gt;\n    &lt;!-- Rendering normale del blocco --&gt;\n&lt;?php endif; ?&gt;<\/code><\/pre>\n<h2>Blocchi ACF con block.json (WordPress 6.x)<\/h2>\n<p>A partire da ACF PRO 6.0 e WordPress 6.x, i blocchi ACF possono essere registrati anche tramite file <code>block.json<\/code>, seguendo la convenzione moderna di WordPress per la registrazione dei blocchi. Questo approccio &#232; pi&#249; strutturato e allineato con le best practice dell&#8217;ecosistema Gutenberg:<\/p>\n<pre><code>\/\/ acf-blocks\/testimonial\/block.json\n{\n    \"name\": \"acf\/testimonial\",\n    \"title\": \"Testimonial\",\n    \"description\": \"Blocco testimonianza cliente\",\n    \"category\": \"formatting\",\n    \"icon\": \"format-quote\",\n    \"keywords\": [\"testimonial\", \"citazione\"],\n    \"acf\": {\n        \"mode\": \"preview\",\n        \"renderTemplate\": \"acf-blocks\/testimonial\/render.php\"\n    },\n    \"supports\": {\n        \"align\": true\n    }\n}<\/code><\/pre>\n<p>I blocchi registrati con block.json beneficiano del caricamento automatico degli asset (CSS e JS) e di una migliore integrazione con gli strumenti di sviluppo di WordPress. Questo metodo &#232; consigliato per i nuovi progetti, mentre l&#8217;approccio PHP tradizionale resta pienamente supportato per la retrocompatibilit&#224;.<\/p>\n<h2>Best Practice per i Blocchi ACF<\/h2>\n<p>Per ottenere il massimo dai blocchi ACF, segui queste best practice consolidate. Organizza i file dei blocchi in una struttura coerente, ad esempio <code>acf-blocks\/nome-blocco\/<\/code> con render.php, style.css e block.json nella stessa cartella. Usa nomi di blocco descrittivi e prefissati per evitare conflitti con altri plugin. Testa sempre i blocchi sia nell&#8217;editor che nel frontend, verificando che l&#8217;anteprima corrisponda al risultato finale.<\/p>\n<p>Gestisci i casi limite: cosa succede quando un campo &#232; vuoto? Cosa succede quando un&#8217;immagine &#232; stata cancellata dalla libreria media? Il template deve gestire questi scenari senza errori PHP o output HTML rotto. Usa sempre l&#8217;escaping appropriato per tutti i valori e fornisci stati di fallback per ogni campo critico. Infine, documenta i blocchi che crei, specialmente se lavori in team: una breve descrizione dei campi e del comportamento atteso facilita enormemente la manutenzione futura.<\/p>\n<div style=\"background:#f9f9f9;border:1px solid #e0e0e0;padding:20px;margin:30px 0;border-radius:8px;\">\n<h3>Leggi anche gli altri articoli della serie ACF<\/h3>\n<ul>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/installare-configurare-acf-advanced-custom-fields\/\">Come Installare e Configurare Advanced Custom Fields su WordPress<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-creare-primo-gruppo-campi-personalizzati\/\">ACF: Creare il Primo Gruppo di Campi Personalizzati<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-tipi-campo-testo-immagine-relazione\/\">Tutti i Tipi di Campo ACF: Testo, Immagine, Relazione e Altro<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-repeater-field-contenuti-ripetibili\/\">ACF e i Repeater Field: Creare Contenuti Ripetibili e Flessibili<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-options-page-impostazioni-globali-tema\/\">ACF e le Options Page: Impostazioni Globali per il Tema<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-visualizzare-campi-frontend-template-shortcode\/\">Visualizzare i Campi ACF nel Frontend: Template e Shortcode<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-elementor-campi-personalizzati-page-builder\/\">ACF e Elementor: Usare i Campi Personalizzati nel Page Builder<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-woocommerce-campi-personalizzati-prodotti\/\">ACF e WooCommerce: Aggiungere Campi Personalizzati ai Prodotti<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-flexible-content-layout-dinamici\/\">ACF Flexible Content: Layout Dinamici Senza Page Builder<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-free-vs-pro-confronto-prezzi\/\">ACF Free vs Pro: Confronto Funzionalit&#224; e Prezzi 2026<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-vs-custom-fields-vs-meta-box-vs-pods\/\">ACF vs Custom Fields Nativi vs Meta Box vs Pods: Confronto<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-import-export-sincronizzazione-json\/\">ACF: Import, Export e Sincronizzazione JSON dei Field Group<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-query-avanzate-wp-query-meta-query\/\">Query Avanzate con ACF: WP_Query, Meta Query e Performance<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/acf-problemi-comuni-troubleshooting\/\">Risolvere i Problemi Comuni di ACF: Troubleshooting<\/a><\/li>\n<\/ul>\n<\/div>\n<p>Per creare blocchi Gutenberg personalizzati con ACF per il tuo sito WordPress, affidati al team di <a href=\"https:\/\/gtechgroup.it\/realizzazione-siti-web\/\">G Tech Group, specializzato nella realizzazione di siti web<\/a> con le tecnologie pi&#249; avanzate dell&#8217;ecosistema WordPress. <a href=\"https:\/\/gtechgroup.it\/contatti\/\">Contattaci<\/a> per una consulenza e porta il tuo sito al livello successivo con blocchi personalizzati professionali.<\/p>\n<h3>Migliora il Tuo Sito WordPress<\/h3>\n<p>Scopri le nostre guide complete sugli altri plugin essenziali per WordPress:<\/p>\n<ul>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/come-installare-elementor-wordpress-guida-principianti\/\">Come Installare Elementor su WordPress<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/wp-rocket-installare-configurare-wordpress\/\">Come Installare e Configurare WP Rocket<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/come-installare-configurare-seopress-wordpress-guida\/\">Come Installare e Configurare SEOPress<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/installare-attivare-updraftplus-wordpress\/\">Come Installare e Configurare UpdraftPlus<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>ACF e Gutenberg: L&#8217;Integrazione che Conta L&#8217;editor a blocchi di WordPress, conosciuto come Gutenberg, ha trasformato radicalmente il modo in cui i contenuti vengono creati&hellip;<\/p>\n","protected":false},"author":0,"featured_media":167113,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"ACF e Gutenberg: Blocchi Custom | Guida","_seopress_titles_desc":"Come creare blocchi Gutenberg custom con ACF. acf_register_block_type, render template e preview.","_seopress_robots_index":"","footnotes":""},"categories":[1],"tags":[2602,3555,3556,1005,492],"class_list":["post-167172","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-senza-categoria","tag-acf","tag-blocchi","tag-custom-blocks","tag-gutenberg","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/167172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/comments?post=167172"}],"version-history":[{"count":0,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/167172\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media\/167113"}],"wp:attachment":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media?parent=167172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/categories?post=167172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/tags?post=167172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}