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

Thèmes

get_theme() contre wp_get_theme() : deux fonctions qu’on confond encore

Laquelle utiliser pour lire les métadonnées d'un thème actif ou installé ? Comparatif entre une fonction dépréciée et son remplacement moderne, avec exemples.

Par WordPress Développement • 16 mai 2021 • 4 min de lecture • Aucun commentaire
get_theme() contre wp_get_theme() : deux fonctions qu'on confond encore

Deux fonctions au nom presque identique, une décennie d’écart dans leur conception, et pourtant on retrouve encore régulièrement get_theme() dans des extraits de code partagés en ligne ou recopiés d’un ancien projet. Comparer précisément ces deux fonctions permet de choisir la bonne sans hésitation, une bonne fois pour toutes.

Ce que fait chacune

get_theme() appartient à l’ancienne génération d’API de gestion des thèmes, antérieure à l’introduction de la classe WP_Theme. Elle retourne un tableau de métadonnées pour un thème donné par son nom, mais uniquement s’il est installé dans le répertoire par défaut des thèmes, sans gestion fine des thèmes enfants ni des répertoires multiples.

wp_get_theme(), introduite bien plus tard, retourne un objet de la classe WP_Theme, avec des méthodes dédiées pour accéder à chaque information, une gestion correcte des thèmes enfants, et la possibilité de cibler un thème précis par son répertoire plutôt que par un nom d’affichage parfois ambigu.

L'essentiel à retenir : get_theme() est dépréciée depuis WordPress 3.4 ; wp_get_theme() retourne un objet riche et orienté objet ; Les deux ne couvrent pas exactement les mêmes usages
Critèreget_theme()wp_get_theme()
StatutDépréciée depuis WordPress 3.4Fonction actuelle recommandée
RetourTableau associatifObjet WP_Theme
Gestion des thèmes enfantsAbsenteNative, via get_template()
Ciblage par répertoireNonOui, en argument
Déclenche une notice de dépréciationOuiNon

Utiliser wp_get_theme() en pratique

Sans argument, la fonction retourne l’objet du thème actuellement actif. Avec un nom de répertoire en argument, elle permet d’inspecter n’importe quel thème installé, actif ou non.

$theme = wp_get_theme();
echo esc_html( $theme->get( 'Name' ) );
echo esc_html( $theme->get( 'Version' ) );

$autre_theme = wp_get_theme( 'twentytwentyone' );
if ( $autre_theme->exists() ) {
    echo esc_html( $autre_theme->get( 'Description' ) );
}

La méthode exists() évite une erreur si le thème demandé n’est plus présent sur le serveur, un cas fréquent après un nettoyage de thèmes inutilisés.

Les pièges à éviter

  • Confondre get_template(), qui retourne le répertoire du thème parent, avec get_stylesheet(), qui retourne celui du thème actif (identique au parent sauf en présence d’un enfant).
  • Oublier que get('Name') retourne le nom d’affichage tel que déclaré dans l’en-tête style.css, pas l’identifiant technique du répertoire.
  • Utiliser get_theme() par habitude dans un projet récent, alors qu’aucune raison technique ne justifie ce choix depuis longtemps.

Pourquoi la dépréciation n’a pas suffi à faire disparaître l’ancienne fonction

Une fonction dépréciée reste techniquement fonctionnelle pendant de nombreuses années dans WordPress, par souci de rétrocompatibilité. Elle continue simplement à déclencher une notice visible seulement si WP_DEBUG est activé. C’est cette discrétion qui explique pourquoi get_theme() survit encore dans certains projets anciens jamais audités depuis leur création.

Un contrôle rapide utile lors d’une reprise de projet : rechercher dans l’ensemble du thème l’appel exact get_theme( pour repérer ce genre de reliquat avant même d’ouvrir le reste du code.

Verdict

wp_get_theme() l’emporte sans discussion possible sur tous les critères pertinents : gestion des thèmes enfants, retour orienté objet plus pratique à manipuler, absence de notice de dépréciation, et ciblage précis d’un thème par son répertoire. Aucun projet démarré aujourd’hui ne devrait faire appel à get_theme(), quelle que soit la simplicité apparente de son ancienne syntaxe.

En résumé

Rencontrer get_theme() dans un projet doit être traité comme un signal d’ancienneté du code, au même titre qu’une fonction PHP dépréciée. Remplacer cet appel par son équivalent moderne prend quelques minutes et élimine une source d’avertissements inutiles dans les journaux de débogage.

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