Le WordPress d'aujourd'hui, décodé pour les développeurs

Extensions

register_setting : publier des options d’extension pour une interface découplée

Une interface d'administration découplée en JavaScript a besoin de lire et d'écrire les réglages d'une extension via l'API REST native, sans construire d'endpoint personnalisé.

Par WordPress Développement • 16 août 2022 • 4 min de lecture • Aucun commentaire
register_setting : publier des options d'extension pour une interface découplée

Faut-il vraiment construire un contrôleur REST personnalisé pour exposer les réglages d’une extension à une interface d’administration découplée en JavaScript ? Dans la grande majorité des cas, la réponse est non : l’endpoint natif /wp/v2/settings, alimenté par register_setting(), couvre déjà ce besoin sans code supplémentaire côté serveur.

Ce réflexe de construire un endpoint sur mesure vient souvent d’une méconnaissance du paramètre show_in_rest disponible depuis plusieurs versions dans register_setting(), alors qu’il suffit à publier un réglage existant sans dupliquer la logique de lecture et d’écriture déjà gérée par le cœur.

Déclarer un réglage exposé à l’API REST

function wpm_enregistrer_reglages_extension() {
    register_setting(
        'wpm_options_groupe',
        'wpm_delai_relance_jours',
        array(
            'type'         => 'integer',
            'description'  => 'Délai en jours avant relance automatique',
            'default'      => 7,
            'show_in_rest' => true,
        )
    );
}
add_action( 'init', 'wpm_enregistrer_reglages_extension' );

Une fois ce réglage déclaré, il apparaît automatiquement dans les réponses de GET /wp/v2/settings, et devient modifiable via une requête POST sur ce même endpoint, sans qu’aucune route supplémentaire n’ait besoin d’être enregistrée.

Contrôler le type avec un schema précis

L'essentiel à retenir : register_setting expose déjà un endpoint /wp/v2/settings avec show_in_rest ; Un schema précis évite les valeurs mal typées écrites par erreur ; La capacité edit_options protège l'écriture par défaut

Comme pour register_meta(), il est possible de fournir un tableau plutôt qu’un simple booléen pour show_in_rest, ce qui permet de définir un schema de validation plus strict que le simple type de base :

'show_in_rest' => array(
    'schema' => array(
        'type'    => 'integer',
        'minimum' => 1,
        'maximum' => 90,
    ),
),

Ce schema empêche qu’une interface découplée, à cause d’un bug côté JavaScript, n’envoie une valeur négative ou disproportionnée qui viendrait perturber la logique métier construite autour de ce réglage.

Requête depuis une interface JavaScript

const reponse = await fetch( '/wp-json/wp/v2/settings', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'X-WP-Nonce': wpApiSettings.nonce,
    },
    body: JSON.stringify( {
        wpm_delai_relance_jours: 14,
    } ),
} );

La capacité qui protège l’écriture

Par défaut, l’écriture sur l’endpoint /wp/v2/settings exige la capacité manage_options, ce qui correspond au rôle administrateur sur une installation standard. Ce comportement ne se paramètre pas réglage par réglage comme avec register_meta() : tous les réglages exposés via register_setting() partagent la même exigence de capacité pour l’écriture.

Ce que cette approche ne couvre pas

  • Une logique métier déclenchée à l’enregistrement, qui nécessite d’accrocher un hook séparé comme update_option_{nom}
  • Un contrôle d’accès différencié selon le réglage plutôt qu’un seuil unique manage_options
  • Une structure de données complexe non représentable par un schema JSON simple

Dans ces situations plus spécifiques, un contrôleur REST personnalisé, construit avec WP_REST_Controller, redevient pertinent. Mais pour la majorité des réglages simples d’une extension – un délai, une clé d’API, une option d’activation/désactivation – register_setting() avec show_in_rest suffit largement.

Besoinregister_setting suffit
Réglage simple, type scalaireOui
Contrôle d’accès par réglageNon, capacité unique
Logique métier au changementAvec un hook complémentaire
Structure complexe imbriquéePossible mais limité

Avant d’écrire un contrôleur REST personnalisé pour un simple réglage, la question à se poser est si register_setting avec show_in_rest ne couvre pas déjà tout le besoin sans une seule ligne de route supplémentaire.

En résumé

Publier les réglages d’une extension pour une interface découplée ne demande dans la plupart des cas ni endpoint personnalisé ni logique de sérialisation additionnelle : register_setting() avec show_in_rest activé et un schema précis suffit à couvrir le besoin de façon fiable, en s’appuyant sur l’API REST déjà présente dans le cœur de WordPress.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi