Ciao, tutti conosciamo la bellezza e la comodità di ACF Pro. Facile, performante, con una UI intuitiva e pratica… ma a che prezzo?
Spesso mi capita di affrontare progetti dove il budget è bello che stirato, ed è qui che entra in gioco il funzionale e un po’ “spartano” Carbon Fields.
Questo plugin non offre un’interfaccia grafica, ma in compenso ha tutto quello che serve per creare campi personalizzati, ripetitori, blocchi Gutenberg, pagine opzioni e quant’altro.
Installazione
Carbon Fields offre due tipi di installazione: con o senza Composer.
Oggi ho deciso di dare un giorno libero a Composer, quindi seguirò le indicazioni della documentazione ufficiale per procedere “manualmente”.
Apriamo il file functions.php, importiamo le classi che ci servono e creiamo un container theme_options all’interno dell’action carbon_fields_register_fields.
use Carbon_Fields\Container;
use Carbon_Fields\Field;
add_action( 'carbon_fields_register_fields', 'crb_attach_theme_options' );
function crb_attach_theme_options() {
Container::make( 'theme_options', __( 'Theme Options' ) )
->add_fields( array(
Field::make( 'text', 'crb_text', 'Text Field' ),
) );
}
add_action( 'after_setup_theme', 'crb_load' );
function crb_load() {
require_once( 'vendor/autoload.php' );
\Carbon_Fields\Carbon_Fields::boot();
}
Scarichiamo il pacchetto zip di Carbon Fields e scompattiamo il contenuto nella cartella plugins di WordPress (oppure lo integriamo direttamente nel tema, in base alle esigenze).
Andiamo nel backend, sezione Plugin, e attiviamolo.
Se tutto è andato a buon fine, dovremmo trovare una nuova pagina opzioni chiamata “Opzioni tema” in fondo alla sidebar di WordPress.
Contenitori
Il contenitore racchiude i nostri campi personalizzati e ne definisce il contesto di visualizzazione.
Mi piace molto com’è strutturato il tutto: leggibile, pulito e dichiarativo.
Container::make( 'post_meta', 'Il mio Box' )
->where( 'post_type', '=', 'page' )
->add_fields( array(
Field::make( 'text', 'custom_text', 'Custom label' ),
Field::make( 'image', 'custom_photo', 'Custom label' ),
));
Il tipo post_meta specifica lo stile del contenitore. Abbiamo a disposizione: post_meta, term_meta, user_meta, comment_meta, nav_menu_item e theme_options…direi che la scelta non manca.
Creare un campo ripetitore
Esiste un esempio migliore per testare questo plugin se non creare un campo ripetitore?
Supponiamo di voler gestire una lista di Membri del Team, dove ogni membro ha un nome e una foto.
Il campo Complex di Carbon Fields è perfetto per questa esigenza.
Container::make('post_meta', 'Informazioni Team')
->where('post_type', '=', 'page')
->where('post_id', '=', 355)
->add_fields([
Field::make('complex', 'crb_team', 'Il Nostro Team')
->add_fields([
Field::make('text', 'nome', 'Nome del Membro'),
Field::make('image', 'foto', 'Foto')->set_required(true),
])
->set_min(2)
->set_max(4)
->set_layout('tabbed-vertical')
]);
Stampare i dati nel template
<?php
$membri_team = carbon_get_the_post_meta('crb_team');
if (!empty($membri_team)): ?>
<div class="team-wrapper">
<?php foreach ($membri_team as $membro): ?>
<div class="membro">
<h3><?php echo esc_html($membro['nome']); ?></h3>
<?php if ($membro['foto']): ?>
<?php echo wp_get_attachment_image($membro['foto'], 'thumbnail'); ?>
<?php endif; ?>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
Conclusioni
Che dire, Carbon Fields mi piace davvero molto: è ricchissimo, flessibile e copre praticamente ogni esigenza senza scomodare il budget.
Vale assolutamente la pena giocarci un po’ e spulciare la documentazione ufficiale.
Grazie per aver letto questo articoletto, alla prossima puntata.

