Chi Siamo Area Clienti Promo del Mese Dicono di Noi Portfolio FAQ Blog
Senza categoria

ACF Flexible Content: Layout Dinamici Senza Page Builder

· 11 min di lettura

Cos’è il Flexible Content di ACF

Il Flexible Content è il campo più avanzato e versatile disponibile in ACF PRO. Si tratta di un campo speciale che permette agli utenti di comporre pagine combinando diversi layout predefiniti, ciascuno con i propri campi specifici. A differenza del Repeater, che ripete sempre la stessa struttura di campi, il Flexible Content offre una scelta tra più strutture diverse, permettendo di creare pagine con sezioni eterogenee come un hero banner, un blocco di testo con immagine, una griglia di servizi, una sezione testimonial e un call-to-action, il tutto gestito da un’unica interfaccia nell’editor di WordPress.

In pratica, il Flexible Content trasforma l’editor di WordPress in un page builder leggero, senza le complessità e l’overhead di strumenti come Elementor o WPBakery. Il grande vantaggio è che i layout sono definiti dallo sviluppatore nel tema, garantendo coerenza visiva e aderenza al brand, mentre il gestore dei contenuti ha la libertà di scegliere quali sezioni includere, in quale ordine e con quali contenuti. Il risultato è un equilibrio perfetto tra flessibilità per l’utente e controllo per lo sviluppatore.

In questo articolo esploreremo la configurazione del Flexible Content, la creazione dei layout, il rendering nel frontend con i template PHP e le strategie per costruire sistemi di layout scalabili e manutenibili. Se sei uno sviluppatore WordPress che desidera offrire ai clienti un’esperienza di editing potente senza dipendere da page builder esterni, il Flexible Content è lo strumento che fa per te.

Creare un Campo Flexible Content

Per creare un campo Flexible Content, accedi all’editor di un gruppo di campi ACF e aggiungi un nuovo campo selezionando il tipo Flexible Content. Assegna un’etichetta come “Contenuto Pagina” o “Sezioni” e configura il nome del campo (ad esempio sezioni_pagina). Una volta selezionato il tipo, l’interfaccia si espande mostrando l’area dove definire i layout.

Ogni layout rappresenta un tipo di sezione che l’utente potrà aggiungere alla pagina. Clicca su Add Layout per creare il primo layout. Ogni layout ha un nome (l’etichetta visibile all’utente), un name (l’identificativo tecnico) e un proprio set di sottocampi. Pensa al layout come a un mini-gruppo di campi autonomo: può contenere qualsiasi tipo di campo ACF, inclusi Text, Image, Wysiwyg, Repeater e persino altri Flexible Content annidati.

Creazione di un campo Flexible Content con layout multipli in ACF PRO

Ecco un esempio di configurazione tipica con cinque layout. Hero Banner: campi per titolo (Text), sottotitolo (Text Area), immagine di sfondo (Image), testo del pulsante CTA (Text) e URL del pulsante (URL). Testo con Immagine: editor Wysiwyg per il testo, campo Image per l’immagine, Select per la posizione dell’immagine (sinistra/destra). Griglia Servizi: Repeater con icona (Image), titolo (Text) e descrizione (Text Area) per ogni servizio. Testimonial: Repeater con foto (Image), nome (Text), ruolo (Text) e citazione (Text Area). Call to Action: titolo (Text), testo (Text Area), testo pulsante (Text) e URL (URL).

Opzioni di Configurazione del Flexible Content

Il campo Flexible Content offre diverse opzioni a livello globale. Minimum Layouts e Maximum Layouts controllano il numero minimo e massimo di sezioni che l’utente può aggiungere. Button Label personalizza il testo del pulsante per aggiungere nuove sezioni (ad esempio “Aggiungi Sezione” invece del generico “Add Row”). Ogni singolo layout ha anche le proprie opzioni: Min e Max per limitare quante volte quel specifico layout può essere usato nella stessa pagina.

L’opzione Layout di ogni singolo layout controlla come i sottocampi vengono visualizzati nell’editor: Block (predefinito) mostra i campi in un blocco espandibile, Table li mostra come colonne di una tabella e Row è un compromesso tra i due. Per layout con molti sottocampi o con campi di tipo Wysiwyg e Image, il formato Block è quasi sempre la scelta migliore perché offre più spazio e una migliore organizzazione visiva.

Un’opzione particolarmente utile è la possibilità di assegnare un’icona a ogni layout nel menu di selezione. Anche se ACF non supporta nativamente le icone personalizzate per i layout, puoi usare il filtro acf/fields/flexible_content/layout_title per aggiungere emoji o icone HTML al titolo di ogni layout, rendendo il menu di selezione più intuitivo per gli utenti.

Rendering del Flexible Content nel Frontend

La visualizzazione del Flexible Content nel frontend è gestita con un loop have_rows() simile a quello del Repeater, con l’aggiunta di get_row_layout() che identifica quale layout è stato selezionato per ogni riga. La struttura base è un ciclo while con un costrutto switch o if/elseif per gestire i diversi layout:

<?php if( have_rows(sezioni_pagina) ): ?>
    <?php while( have_rows(sezioni_pagina) ): the_row(); ?>

        <?php if( get_row_layout() == hero_banner ): ?>
            <section class="hero">
                <h1><?php the_sub_field(titolo); ?></h1>
                <p><?php the_sub_field(sottotitolo); ?></p>
            </section>

        <?php elseif( get_row_layout() == testo_con_immagine ): ?>
            <section class="text-image">
                <div class="text"><?php the_sub_field(testo); ?></div>
                <?php $img = get_sub_field(immagine); ?>
                <img src="<?php echo esc_url($img[url]); ?>" alt="<?php echo esc_attr($img[alt]); ?>" />
            </section>

        <?php elseif( get_row_layout() == call_to_action ): ?>
            <section class="cta">
                <h2><?php the_sub_field(titolo); ?></h2>
                <a href="<?php the_sub_field(url_pulsante); ?>">
                    <?php the_sub_field(testo_pulsante); ?>
                </a>
            </section>

        <?php endif; ?>
    <?php endwhile; ?>
<?php endif; ?>

Per mantenere il codice organizzato e manutenibile, è fortemente consigliato separare il rendering di ogni layout in un file template part dedicato. Invece di scrivere tutto l’HTML nel template principale, crea una cartella template-parts/flex/ nel tema con un file per ogni layout (ad esempio hero-banner.php, testo-immagine.php, call-to-action.php) e includi il file appropriato con get_template_part().

Organizzazione dei Template Part

Un’architettura ben organizzata per il Flexible Content utilizza una struttura di file chiara e coerente. Ecco la struttura consigliata per il tema:

tema/
├── template-parts/
│   └── flex/
│       ├── hero-banner.php
│       ├── testo-immagine.php
│       ├── griglia-servizi.php
│       ├── testimonial.php
│       ├── call-to-action.php
│       ├── gallery.php
│       └── faq.php

Organizzazione dei gruppi di campi per il Flexible Content in ACF

Il template principale diventa estremamente pulito, con un singolo loop che carica automaticamente il file corretto in base al layout selezionato. Puoi sfruttare una convenzione di naming per automatizzare il caricamento: se il nome tecnico del layout corrisponde al nome del file template part, puoi usare get_template_part(template-parts/flex/ . get_row_layout()) per caricare automaticamente il file senza bisogno di un costrutto if/elseif per ogni layout. Questo approccio è elegante e scalabile: aggiungere un nuovo layout richiede solo di creare il layout in ACF e il corrispondente file template, senza modificare il template principale.

Layout Avanzati con Opzioni di Stile

Per offrire maggiore flessibilità agli utenti senza sacrificare la coerenza del design, puoi aggiungere campi di stile a ogni layout. Un approccio comune è creare un campo Tab “Stile” (o “Opzioni”) all’interno di ogni layout con campi come: Sfondo (Select con opzioni Bianco, Grigio chiaro, Scuro, Immagine), Padding (Select con opzioni Piccolo, Medio, Grande), Allineamento (Button Group con Sinistra, Centro, Destra) e Larghezza (Select con Contenuto, Piena larghezza).

Questi campi di stile vengono poi tradotti in classi CSS nel template part:

<?php
$sfondo = get_sub_field(sfondo) ?: bianco;
$padding = get_sub_field(padding) ?: medio;
$larghezza = get_sub_field(larghezza) ?: contenuto;
?>
<section class="section-hero bg-<?php echo esc_attr($sfondo); ?> padding-<?php echo esc_attr($padding); ?> width-<?php echo esc_attr($larghezza); ?>">
    <!-- contenuto del layout -->
</section>

Questo approccio dà all’utente la possibilità di personalizzare l’aspetto di ogni sezione (alternare sfondi chiari e scuri, variare il padding, ecc.) pur restando all’interno di un sistema di design predefinito. Lo sviluppatore mantiene il controllo sulle opzioni disponibili e sullo stile CSS corrispondente, garantendo che ogni combinazione di opzioni produca un risultato visivamente coerente.

Flexible Content vs Page Builder: Quando Scegliere Cosa

La domanda che molti sviluppatori si pongono è: perché usare il Flexible Content quando esistono page builder più potenti come Elementor o WPBakery? La risposta dipende dal progetto e dal profilo dell’utente finale. Il Flexible Content eccelle in scenari dove il controllo del design è critico: siti aziendali con un brand guide rigoroso, portali istituzionali con standard di accessibilità, siti dove la coerenza visiva non può essere lasciata alla discrezione dell’utente.

I vantaggi del Flexible Content rispetto ai page builder includono: performance superiori (nessun CSS/JS aggiuntivo dei page builder, HTML pulito e semantico), manutenibilità (il codice dei layout è nel tema, versionabile con Git), portabilità (se cambi tema, i dati ACF restano nel database e possono essere riutilizzati), sicurezza (l’utente non può inserire codice arbitrario o rompere il layout). Gli svantaggi principali sono la necessità di uno sviluppatore per creare nuovi layout e la mancanza di un’anteprima visuale in tempo reale nell’editor.

In molti progetti professionali, la soluzione ideale è un approccio ibrido: usare il Flexible Content per le pagine principali del sito (homepage, chi siamo, servizi) dove il design deve essere perfetto, e Elementor o Gutenberg per le pagine secondarie (articoli del blog, landing page temporanee) dove la velocità di creazione è più importante della perfezione del codice.

Gestire Layout Complessi: Annidamento e Relazioni

Il Flexible Content supporta l’annidamento di Repeater all’interno dei layout (ad esempio, una griglia di servizi con un Repeater per i singoli servizi) e, con ACF PRO, puoi anche annidare un Flexible Content dentro un altro, anche se questa pratica è generalmente sconsigliata per la complessità che introduce sia nel backend che nel frontend.

Strumenti ACF per la gestione del Flexible Content e dei layout dinamici

Un approccio più sostenibile per contenuti complessi è combinare il Flexible Content con i campi relazionali. Invece di annidare un Repeater di testimonial dentro il layout “Sezione Testimonial”, puoi creare un custom post type “Testimonial” e usare un campo Relationship nel layout per selezionare quali testimonial mostrare. Questo approccio separa i dati dalla presentazione: i testimonial esistono come entità indipendenti e possono essere riutilizzati in più pagine senza duplicazione.

Questo pattern architetturale, dove il Flexible Content gestisce il layout e i custom post type gestiscono i dati, è considerato una best practice nella comunità degli sviluppatori ACF. Produce codice più pulito, database più efficienti e un’esperienza di editing più intuitiva. Lo svantaggio è che richiede più lavoro iniziale nella progettazione dell’architettura, ma ripaga ampiamente in manutenibilità e scalabilità.

Preview e Anteprima dei Layout

Una delle limitazioni storiche del Flexible Content è la mancanza di un’anteprima visuale nell’editor. L’utente vede solo i campi da compilare, senza un’idea chiara di come il layout apparirà nel frontend. Per mitigare questo problema, puoi adottare diverse strategie. La prima è utilizzare il campo Message all’inizio di ogni layout per mostrare un’anteprima o una descrizione visiva del layout, eventualmente con un’immagine di esempio.

La seconda strategia è sfruttare il sistema di preview di WordPress: assicurati che il pulsante “Anteprima” funzioni correttamente per il tuo tema, in modo che l’utente possa vedere il risultato in un’altra finestra del browser mentre compila i campi. La terza strategia, più avanzata, è utilizzare JavaScript personalizzato per creare anteprime live nell’editor, ma questo richiede un investimento significativo in sviluppo frontend.

Con l’introduzione dei blocchi ACF per Gutenberg (che tratteremo in un articolo dedicato), la situazione è migliorata notevolmente: i blocchi ACF offrono un’anteprima nativa nell’editor Gutenberg, combinando la potenza dei campi ACF con l’esperienza visuale dell’editor a blocchi.

Leggi anche gli altri articoli della serie ACF

Per implementare layout dinamici professionali con ACF Flexible Content nel tuo sito WordPress, il team di G Tech Group è specializzato nella realizzazione di siti web con architetture avanzate e personalizzabili. Contattaci per una consulenza e scopri come il Flexible Content può rivoluzionare la gestione del tuo sito.

Migliora il Tuo Sito WordPress

Scopri le nostre guide complete sugli altri plugin essenziali per WordPress:

#ACF #Dinamici #Flexible Content #Layout #Wordpress