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

Éditeur de site (FSE)

wp_is_block_theme() décide qui peut personnaliser un template

Une extension qui affiche un bouton de personnalisation de template doit d'abord savoir si le thème actif en est capable. Une seule fonction tranche la question.

Par WordPress Développement • 7 novembre 2023 • 4 min de lecture • Aucun commentaire
wp_is_block_theme() décide qui peut personnaliser un template

if ( wp_is_block_theme() ) { ... } — cette simple condition détermine si une extension doit proposer un lien vers l’éditeur de template, ou vers l’ancien Customizer. Depuis que WordPress prend en charge deux familles de thèmes bien distinctes, une extension qui veut rester pertinente sur les deux doit savoir laquelle est active avant d’afficher quoi que ce soit qui dépende du type de thème.

Définition : un booléen, pas un dégradé

La fonction wp_is_block_theme() renvoie un booléen strict : vrai si le thème actif possède un dossier templates avec au moins un fichier index.html, condition suffisante pour qu’il soit reconnu comme thème hybride ; faux dans tous les autres cas, y compris pour un thème classique qui utiliserait theme.json uniquement pour ses styles globaux sans proposer de templates au format bloc. Il n’existe pas d’état intermédiaire officiel : un thème est soit hybride, soit classique, du point de vue de cette fonction.

Fonctionnement interne : ce que la fonction vérifie réellement

L'essentiel à retenir : wp_is_block_theme() renvoie un simple booléen, sans détail intermédiaire ; Un thème hybride autorise l'édition de template, un thème classique non ; Vérifier cette condition évite d'afficher un bouton qui ne mènera nulle part

En interne, wp_is_block_theme() s’appuie sur la méthode is_block_theme() de la classe WP_Theme, qui recherche la présence du fichier templates/index.html dans la structure du thème actif — y compris, le cas échéant, dans un thème parent si le thème actif est un enfant qui ne définit pas ses propres templates. Ce test structurel, et non une simple déclaration dans l’en-tête du thème, explique pourquoi il suffit d’ajouter le bon fichier au bon endroit pour qu’un thème bascule de classique à hybride aux yeux de WordPress.

function mon_extension_afficher_lien_personnalisation() {
    if ( wp_is_block_theme() ) {
        return admin_url( 'site-editor.php?path=/wp_template' );
    }

    return admin_url( 'customize.php' );
}

Cas d’usage : adapter le comportement d’une extension

Une extension qui ajoute un type de contenu personnalisé et propose un bouton « Personnaliser l’affichage » doit rediriger différemment selon le thème actif : vers l’éditeur de template pour un thème hybride, où l’utilisateur pourra modifier directement le gabarit d’archive du type de contenu ; vers le Customizer, ou vers ses propres réglages internes, pour un thème classique, où l’éditeur de template n’existe simplement pas. Sans cette vérification, le bouton pointerait vers un écran qui n’apporte rien pour la moitié des thèmes possibles.

Un usage plus fin : conditionner l’enregistrement d’un hook

Certaines extensions vont plus loin et n’enregistrent certains filtres liés aux templates de blocs que si le thème actif est effectivement hybride, pour éviter d’alourdir inutilement l’exécution sur les sites qui utilisent un thème classique :

add_action( 'init', function () {
    if ( ! wp_is_block_theme() ) {
        return;
    }

    add_filter( 'render_block', 'mon_extension_modifier_bloc_produit', 10, 2 );
} );

Pièges à connaître

  • tester wp_is_block_theme() trop tôt dans le cycle de chargement, avant que le thème actif ne soit pleinement initialisé, peut renvoyer un résultat qui ne reflète pas encore l’état final ; l’appeler depuis init ou plus tard reste le choix le plus sûr ;
  • confondre un thème hybride avec un thème qui utilise seulement theme.json pour ses styles globaux, sans dossier templates : ce dernier reste un thème classique aux yeux de la fonction, même s’il exploite certaines capacités des styles globaux ;
  • oublier qu’un thème enfant d’un thème hybride est lui aussi considéré comme hybride, même s’il ne définit aucun template propre, du moment que son parent en fournit.

Dans une extension destinée à un public large, nous considérons wp_is_block_theme() comme une vérification aussi systématique que celle de la version de WordPress installée : elle conditionne trop de choix d’interface pour être laissée de côté.

Ce qu’il faut retenir

Une seule fonction, un seul booléen, mais une décision qui structure toute l’expérience proposée par une extension selon le thème actif. Ignorer cette vérification ne provoque pas d’erreur visible dans l’immédiat, mais expose des liens et des options qui ne mènent nulle part pour une partie des utilisateurs — une régression discrète, mais bien réelle, de l’expérience proposée.

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