Pages d’options avec ACF Composer
Les pages d’options permettent de définir des réglages globaux accessibles depuis l’administration WordPress (contenus transverses, paramètres du thème, éléments partagés, etc.).
Dans le T32B, les pages d’options sont définies exclusivement via ACF Composer, afin de garantir une configuration versionnée, cohérente et reproductible.
Pourquoi utiliser ACF Composer pour les pages d’options ?
L’utilisation d’ACF Composer pour les pages d’options permet de :
- Centraliser les paramètres globaux du projet
- Éviter les configurations manuelles en base de données
- Versionner les options avec le code
- Garantir la stabilité des clés ACF
- Faciliter la maintenance et l’évolution du projet
Principe de fonctionnement
Une page d’options est définie dans une classe PHP dédiée, au même titre qu’un groupe de champs classique.
Cette classe :
- déclare la page d’options (titre, slug, menu)
- définit les champs associés
- est automatiquement enregistrée au chargement de l’application
⚠️ Pour que votre page d'option soit traduisible par Polylang, il faut définir dans le constructeur de votre classe, le
post_idsurconfig('app.options.key'). Voir exemple ci-dessous.
Création via la ligne de commande
La création d’une page d’options se fait via la ligne de commande :
wp acorn acf:options ThemeOptionsExemple
namespace App\Configurations\Options;
use Log1x\AcfComposer\AcfComposer;
use Log1x\AcfComposer\Builder;
use Log1x\AcfComposer\Options as Field;
class ThemeOption extends Field
{
/**
* The option page menu name.
*
* @var string
*/
public $name = 'Réglages du thème';
/**
* The option page document title.
*
* @var string
*/
public $title = 'Réglages du thème';
public $parent = 'options-general.php';
public function __construct(AcfComposer $composer)
{
$this->settings = [
'post_id' => config('app.options.key'),
];
parent::__construct($composer);
}
/**
* The option page field group.
*/
public function fields(): array
{
$fields = Builder::make('t32b_theme_options');
$fields->addTab('global', [
'label' => __('Configuration globale', config('app.domain')),
]);
$fields->addFields($this->globalFields());
return $fields->build();
}
protected function globalFields(): Builder
{
$fields = Builder::make('t32b_theme_options_global');
$fields->addGroup('t32b_theme_options_global', [
'label' => __('', DOMAIN),
])
->addText('phone', [
'label' => __('Numéro de téléphone', DOMAIN),
])
->addText('address', [
'label' => __('Adresse', DOMAIN),
])
->addText('zip', [
'label' => __('Code postal', DOMAIN),
'wrapper' => [
'width' => '33%',
],
])
->addText('city', [
'label' => __('Ville', DOMAIN),
'wrapper' => [
'width' => '66%',
],
])
->addText('latitude', [
'label' => __('Latitude', DOMAIN),
'wrapper' => [
'width' => '50%',
],
])
->addText('longitude', [
'label' => __('Longitude', DOMAIN),
'wrapper' => [
'width' => '50%',
],
])
->endGroup();
return $fields;
}
}