# Meta Box ou Carbon Fields pour exposer des champs personnalisés en headless

> Comparatif de deux alternatives à ACF pour préparer des champs personnalisés consommables en headless, avec un verdict pensé pour un projet sans budget d'extension premium.

- Auteur : WordPress Développement
- Publié le : 2023-05-23
- Mis à jour le : 2023-05-23
- Catégorie : Headless &amp; API
- URL : https://www.wpmoderne.fr/headless/meta-box-carbon-fields-comparatif-headless/

## L’essentiel

- Carbon Fields se déclare entièrement en PHP, sans interface d'administration à configurer
- Meta Box propose un générateur visuel gratuit avec une extension REST séparée
- Le budget zéro a fait pencher la balance vers une des deux solutions

Combien coûte un champ personnalisé sur un projet dont le budget d'extensions premium est littéralement nul ? C'est la contrainte posée par une association de médiation numérique itinérante, qui avait besoin d'un catalogue d'ateliers consultable par une petite application mobile de réservation, sans un centime à consacrer à une licence de plugin. ACF Pro, avec son extension REST intégrée, était donc exclu d'office malgré sa popularité.

Deux alternatives gratuites et sérieuses restaient en lice : Carbon Fields, une bibliothèque entièrement déclarée en code, et Meta Box, dont le cœur est gratuit mais dont certaines fonctionnalités avancées passent par des extensions payantes. Les deux ont été testées sur le même besoin réel : un type de contenu `atelier` avec une date, un lieu, un niveau de difficulté et une liste de matériel requis.

## Carbon Fields : tout en PHP, rien dans l'interface

Carbon Fields ne propose aucune interface de configuration visuelle : chaque groupe de champs se déclare en code, généralement dans le fichier principal du thème ou d'un plugin dédié. Ce choix déplaît à certains, mais il présente un avantage net pour un projet headless : la déclaration des champs peut vivre au même endroit que la déclaration de l'exposition REST, dans un seul fichier versionné.

```
use Carbon_Fields\Container;
use Carbon_Fields\Field;

add_action( 'carbon_fields_register_fields', function () {
    Container::make( 'post_meta', 'Détails de l\'atelier' )
        ->where( 'post_type', '=', 'atelier' )
        ->add_fields( array(
            Field::make( 'date', 'date_atelier', 'Date' ),
            Field::make( 'text', 'lieu_atelier', 'Lieu' ),
            Field::make( 'select', 'niveau', 'Niveau' )
                ->set_options( array(
                    'debutant'     => 'Débutant',
                    'intermediaire' => 'Intermédiaire',
                ) ),
        ) );
} );
```

L'exposition REST des champs Carbon Fields n'est pas automatique : il faut la déclarer explicitement via `register_rest_field()`, ce qui demande un peu plus de code au départ mais laisse un contrôle total sur ce qui sort dans la réponse JSON.

## Meta Box : une interface visuelle, une extension REST à part

Meta Box permet de construire les mêmes groupes de champs via une interface graphique, ou via son propre système de déclaration en tableau PHP, plus proche dans l'esprit de la syntaxe d'ACF. Pour exposer ces champs dans l'API REST, il faut installer en plus l'extension gratuite *MB REST API*, distincte du cœur du plugin.

> L'essentiel à retenir : Carbon Fields se déclare entièrement en PHP, sans interface d'administration à configurer ; Meta Box propose un générateur visuel gratuit avec une extension REST séparée ; Le budget zéro a fait pencher la balance vers une des deux solutions

```
add_filter( 'rwmb_meta_boxes', function ( $meta_boxes ) {
    $meta_boxes[] = array(
        'title'      => 'Détails de l\'atelier',
        'post_types' => array( 'atelier' ),
        'fields'     => array(
            array( 'id' => 'date_atelier', 'type' => 'date', 'name' => 'Date' ),
            array( 'id' => 'lieu_atelier', 'type' => 'text', 'name' => 'Lieu' ),
        ),
        'rest' => array( 'field_name' => 'atelier_details' ),
    );
    return $meta_boxes;
} );
```

Une fois l'extension REST activée, l'exposition est bien plus rapide à mettre en place que sur Carbon Fields : le paramètre `rest` dans la déclaration du champ suffit. C'est un gain de temps réel pour un projet où l'équipe médiation numérique devait pouvoir ajouter elle-même de nouveaux champs sans redemander à un développeur à chaque fois.

### Le tableau comparatif

| Critère | Carbon Fields | Meta Box (+ MB REST API) |
| --- | --- | --- |
| Interface d'administration | Aucune, tout en code | Générateur visuel disponible |
| Exposition REST | Manuelle, via register_rest_field | Déclarative, via le paramètre rest |
| Autonomie de l'équipe non technique | Faible | Bonne |
| Dépendance à une extension tierce | Aucune | Une extension supplémentaire à jour |

## Ce comparatif ne traite pas d'ACF

ACF, dans sa version gratuite, ne propose pas nativement l'exposition REST des champs personnalisés sans code additionnel, et sa version Pro était exclue par la contrainte budgétaire posée dès le départ. La comparaison volontaire s'est donc limitée à deux alternatives entièrement gratuites, sans revenir sur les mérites d'ACF lui-même, largement documentés ailleurs.

> Le plugin gratuit le plus adapté n'est pas celui qui a le plus de fonctionnalités, c'est celui dont les limites correspondent le mieux à qui va réellement l'utiliser une fois le développeur reparti.

## Le choix retenu

Meta Box avec son extension REST gratuite a finalement été retenu, malgré une exposition API légèrement moins contrôlée que celle de Carbon Fields. L'argument décisif a été l'autonomie rendue à l'équipe de médiation numérique, qui gère désormais seule l'ajout de nouveaux champs pour ses ateliers sans dépendre d'un développeur à chaque évolution.

## Le point de vigilance

Un choix technique gratuit reste un choix technique : la dépendance à une extension REST séparée impose de vérifier sa compatibilité à chaque montée de version de WordPress, un travail de veille qu'il ne faut pas sous-estimer sur un projet associatif dont les ressources de maintenance resteront limitées dans la durée.
