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

- Auteur : WordPress Développement
- Publié le : 2024-02-29
- Mis à jour le : 2024-02-29
- Catégorie : Thèmes
- URL : https://www.wpmoderne.fr/themes/wp-get-theme-version-verification-compatibilite/

## L’essentiel

- 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

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.
