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

Thèmes

wp_get_theme()->get(‘Version’) fiabilise une vérification de compatibilité

Une extension qui conditionne une fonctionnalité à une version minimale du thème actif dispose d'une méthode fiable pour la vérifier, sans jamais lire directement le fichier style.css.

Par WordPress Développement • 29 février 2024 • 4 min de lecture • Aucun commentaire
wp_get_theme()->get('Version') fiabilise une vérification de compatibilité

Comment une extension peut-elle s’assurer que le thème actif est assez récent pour une fonctionnalité donnée, sans risquer de provoquer un rendu cassé sur une version plus ancienne qui ne dispose pas encore du balisage attendu ? La méthode get( 'Version' ) de l’objet renvoyé par wp_get_theme() répond précisément à ce besoin récurrent.

La tentation la plus fréquente, face à ce besoin, consiste à lire directement le fichier style.css du thème actif avec des fonctions de manipulation de fichiers et une expression régulière pour en extraire le numéro de version. Cette approche fonctionne, mais elle réinvente un mécanisme que WordPress expose déjà de façon fiable et documentée.

wp_get_theme(), la porte d’entrée officielle vers les métadonnées d’un thème

La fonction wp_get_theme(), appelée sans argument, renvoie un objet WP_Theme représentant le thème actuellement actif. Cet objet expose une méthode get() qui accepte le nom de n’importe quel champ déclaré dans l’en-tête du fichier style.css, sans nécessiter de lecture ni d’analyse manuelle du fichier :

$theme   = wp_get_theme();
$version = $theme->get( 'Version' );

if ( version_compare( $version, '2.4.0', '>=' ) ) {
    // Le thème actif est suffisamment récent pour cette fonctionnalité.
}

Pourquoi cette méthode reste préférable à la lecture directe du fichier

WordPress met en cache les métadonnées d’un thème après leur première lecture, ce qui rend les appels successifs à wp_get_theme() nettement plus rapides qu’une lecture répétée du fichier via file_get_contents(). La fonction gère également correctement les cas particuliers, comme un thème enfant dont le numéro de version diffère de celui du thème parent, ou un encodage de caractères différent d’un thème à l’autre.

L'essentiel à retenir : wp_get_theme() lit l'en-tête du thème actif sans jamais parser le fichier soi-même ; La méthode get() accepte n'importe quel champ d'en-tête déclaré, pas seulement Version ; version_compare() reste l'outil adapté pour comparer deux numéros de version

get_theme() et wp_get_theme() ne sont pas la même fonction

Une confusion fréquente concerne get_theme(), une fonction plus ancienne, marquée comme obsolète depuis WordPress 3.4, qui ne doit plus être utilisée dans un code neuf. wp_get_theme() est son remplacement direct, introduit précisément à cette version, avec une interface orientée objet plus riche et une meilleure gestion des thèmes enfants. Tout code encore basé sur get_theme() mérite d’être migré, l’ancienne fonction pouvant disparaître d’une version majeure à l’autre sans préavis supplémentaire au-delà de la dépréciation déjà annoncée depuis longtemps.

Vérifier le thème d’un site distant plutôt que le thème actif

wp_get_theme() accepte également un paramètre optionnel, le nom du dossier d’un thème installé mais pas nécessairement actif, ce qui permet de vérifier la version d’un thème présent sur le site sans qu’il soit forcément celui utilisé pour l’affichage :

$theme_installe = wp_get_theme( 'mon-theme-parent' );
if ( $theme_installe->exists() ) {
    $version_parent = $theme_installe->get( 'Version' );
}

La méthode exists() permet de vérifier au préalable que le thème demandé est bien installé, évitant de traiter une version vide comme un numéro de version valide dans la comparaison qui suit.

Une vérification de compatibilité qui repose sur une lecture de fichier maison finit toujours par mal gérer un cas particulier que l’API du cœur avait déjà anticipé.

version_compare(), l’outil natif de PHP pour ces comparaisons

La comparaison de numéros de version ne doit jamais se faire avec des opérateurs de comparaison de chaînes classiques, qui traitent « 2.10.0 » comme inférieur à « 2.9.0 » en comparaison lexicographique. La fonction native version_compare() de PHP comprend la structure sémantique des numéros de version et compare correctement chaque segment :

var_dump( version_compare( '2.10.0', '2.9.0', '>' ) ); // true

En résumé

Une extension qui conditionne une fonctionnalité à une version minimale du thème actif gagne à s’appuyer sur wp_get_theme()->get( 'Version' ) plutôt que sur une lecture manuelle du fichier style.css, et à comparer les numéros obtenus avec version_compare() plutôt qu’avec une comparaison de chaînes classique. Ces deux fonctions, toutes deux natives et documentées, couvrent l’essentiel des cas particuliers qu’une implémentation maison finirait tôt ou tard par mal gérer.

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