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

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 depuisinitou plus tard reste le choix le plus sûr ; - confondre un thème hybride avec un thème qui utilise seulement
theme.jsonpour ses styles globaux, sans dossiertemplates: 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.