# 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.

- Auteur : WordPress Développement
- Publié le : 2021-05-16
- Mis à jour le : 2021-05-16
- Catégorie : Thèmes
- URL : https://www.wpmoderne.fr/themes/get-theme-contre-wp-get-theme-confusion/

## L’essentiel

- 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

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ère | get_theme() | wp_get_theme() |
| --- | --- | --- |
| Statut | Dépréciée depuis WordPress 3.4 | Fonction actuelle recommandée |
| Retour | Tableau associatif | Objet WP_Theme |
| Gestion des thèmes enfants | Absente | Native, via get_template() |
| Ciblage par répertoire | Non | Oui, en argument |
| Déclenche une notice de dépréciation | Oui | Non |

## 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.
