Deprecated: Return type of WPML_String_Translation::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool. Voilà le genre de ligne qui envahit les logs d’erreurs PHP dès qu’une agence bascule un environnement de recette de PHP 7.4 vers PHP 8.1 sur un site WordPress traduit avec WPML. Rien ne casse immédiatement : ce sont des avertissements de dépréciation, pas des erreurs fatales. Mais les ignorer revient à repousser un problème qui deviendra bloquant à la prochaine montée de version PHP majeure.
Ce billet ne traite pas de la migration PHP en général, un sujet déjà couvert côté hébergement : il se concentre précisément sur ce que WPML String Translation, le module de traduction des chaînes de caractères du thème et des extensions, déclenche comme avertissements spécifiques en PHP 8.1, et sur la méthode pour les traiter avant qu’ils ne deviennent un problème de production.
Ce que PHP 8.1 a changé et pourquoi WPML est concerné
PHP 8.1 a introduit une vérification plus stricte de la compatibilité des signatures de méthodes qui implémentent des interfaces natives comme ArrayAccess, Countable ou Iterator. Concrètement, si une classe déclare une méthode offsetExists() sans typer son argument et sa valeur de retour exactement comme le prévoit l’interface native, PHP 8.1 émet un avertissement de dépréciation, là où PHP 7.4 restait silencieux sur ce point. WPML String Translation, dont certaines classes internes datent d’avant l’adoption généralisée du typage strict en PHP, contient plusieurs méthodes de ce type qui n’ont pas encore été mises à jour dans certaines versions de l’extension.
Repérer les avertissements avant qu’ils ne s’accumulent

La méthode la plus fiable pour détecter ces avertissements avant la mise en production consiste à activer temporairement l’affichage complet des erreurs sur un environnement de recette isolé, jamais sur le site en production :
// wp-config.php, environnement de recette uniquement
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
error_reporting( E_ALL );
Avec cette configuration, chaque avertissement de dépréciation est journalisé dans wp-content/debug.log sans jamais s’afficher aux visiteurs. Il suffit ensuite de naviguer sur les pages qui sollicitent le plus la traduction de chaînes — pages avec menu, widgets, formulaires traduits — pour faire remonter la majorité des avertissements liés à WPML String Translation en quelques minutes de navigation.
Ce qu’il faut faire de ces avertissements
La première chose à vérifier est la version installée de WPML String Translation : les éditeurs de WPML publient régulièrement des correctifs de compatibilité PHP, et une bonne partie des avertissements observés sur PHP 8.1 disparaissent simplement en mettant à jour l’extension vers sa dernière version stable, sans toucher au code du thème. C’est l’étape la plus rentable et la première à effectuer.
Si des avertissements persistent après mise à jour, généralement issus de personnalisations spécifiques au thème qui étendent des classes WPML, la solution consiste à corriger la signature des méthodes concernées pour respecter strictement le contrat de l’interface native, sans changer le comportement fonctionnel du code :
// Avant : signature non conforme, avertissement en PHP 8.1
public function offsetExists( $offset ) {
return isset( $this->data[ $offset ] );
}
// Après : signature conforme à ArrayAccess::offsetExists()
public function offsetExists( mixed $offset ): bool {
return isset( $this->data[ $offset ] );
}
Pourquoi ça ne peut pas attendre indéfiniment
Un avertissement de dépréciation en PHP 8.1 est, par nature, une annonce anticipée : le langage prévient les développeurs qu’un comportement va changer, sans encore casser le fonctionnement actuel. Sur les versions PHP majeures suivantes, ces avertissements deviennent parfois des erreurs fatales, notamment lorsque le typage strict des interfaces devient une exigence stricte plutôt qu’une recommandation. Traiter ces avertissements dès leur apparition, plutôt qu’à la prochaine montée de version PHP dans l’urgence, évite un chantier de correctif sous pression au moment où l’hébergeur imposera la version suivante.
Le cas des thèmes tiers non maintenus
Un cas plus délicat survient quand les avertissements proviennent non pas de WPML lui-même mais d’un thème tiers acheté qui étend des classes WPML sans être activement maintenu par son éditeur. Dans ce cas, la seule option robuste consiste à isoler le correctif dans une extension enfant ou un mu-plugin, jamais en modifiant directement les fichiers du thème acheté, pour ne pas perdre la correction à la prochaine mise à jour officielle du thème, si elle survient un jour.
- Toujours tester la montée de version PHP sur un environnement de recette isolé, jamais en production directe
- Mettre à jour WPML String Translation avant toute chose : la majorité des avertissements viennent de là
- Corriger les signatures de méthode non conformes plutôt que de les ignorer
- Isoler tout correctif de compatibilité dans une extension dédiée, jamais dans les fichiers du thème
En résumé
Les avertissements de dépréciation liés à PHP 8.1 sur WPML String Translation ne sont pas une urgence de production, mais ils sont un signal fiable à ne pas balayer d’un revers de main. Les traiter méthodiquement — mise à jour de l’extension, correction ciblée du code personnalisé, isolation propre des correctifs — coûte quelques heures aujourd’hui et évite un chantier bien plus lourd le jour où l’hébergeur imposera la version PHP suivante.