Depuis PHP 8.1, une classe qui reprend une interface de PHP (ArrayAccess, Countable, Iterator, JsonSerializable…) doit annoncer le type de valeur que renvoient ses méthodes. Le code cité ne le fait pas encore. PHP le tolère, mais prévient par un avis de dépréciation (Deprecated) qu’une future version le refusera. Votre site fonctionne normalement : ce message s’adresse au développeur du thème ou de l’extension.
Pourquoi cette erreur apparaît
- L’extension ou le thème a été écrit avant PHP 8.1 et n’a pas été adapté depuis.
- Une bibliothèque livrée dans le dossier vendor d’une extension est restée dans une ancienne version, même si l’extension elle-même est récente.
- Un WordPress resté sur une version ancienne affiche ces avis pour ses propres fichiers, situés dans wp-includes.
- Le mode débogage est actif sur le site en ligne : sans lui, WordPress ne montre pas les avis Deprecated.
Comment corriger le problème
Identifier qui doit corriger
Le message cite deux méthodes : la première appartient au code fautif, la seconde à l’interface de PHP qu’il reproduit. Le chemin final désigne le dossier : wp-content/plugins/nom pour une extension, wp-content/themes/nom pour un thème, wp-includes pour WordPress lui-même. Un passage par vendor signale une bibliothèque fournie avec cette extension.
Mettre à jour, puis prévenir l’éditeur
Après une sauvegarde, mettez à jour WordPress, le thème et les extensions. Si l’avis concerne wp-includes, la mise à jour de WordPress suffit en général. Pour une extension sans nouvelle version, joignez le message à votre demande auprès de son éditeur : la correction est mécanique pour lui.
Masquer l’avis sans le perdre de vue
En production, réglez WP_DEBUG_DISPLAY sur false : l’avis disparaît des pages, mais WP_DEBUG_LOG continue de l’écrire dans un fichier à consulter de temps en temps. Le code ci-dessous range ce journal dans un dossier logs, à créer au préalable, au-dessus du dossier du site : le debug.log par défaut, dans wp-content, est souvent lisible depuis le web. Repassez WP_DEBUG à false une fois les avis traités.
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', dirname( __DIR__ ) . '/logs/wp-debug.log' );
Ne pas redescendre de version de PHP
Revenir à PHP 7.4 ferait taire l’avis, mais cette version ne reçoit plus de correctifs de sécurité. Mieux vaut rester en PHP 8 et faire évoluer le code concerné.
Déclarer le type de retour
Dans votre propre code, ajoutez le type attendu par l’interface, tel qu’il figure dans le message (: mixed, : bool, : int, : void). Si le code doit encore tourner sous PHP 7, l’attribut #[ReturnTypeWillChange], ignoré par PHP 7, fait taire l’avis en attendant.
class Galerie_Collection implements ArrayAccess {
private $items = array();
// PHP 8 uniquement : type déclaré
public function offsetExists( mixed $offset ): bool {
return isset( $this->items[ $offset ] );
}
// Compatible PHP 7 et 8 : attribut temporaire
#[ReturnTypeWillChange]
public function offsetGet( $offset ) {
return $this->items[ $offset ] ?? null;
}
// offsetSet() et offsetUnset() sur le même modèle
}
Sauvegardez le site avant les mises à jour, et ne retouchez pas les fichiers d’une extension tierce : sa prochaine version écraserait la modification.
Un autre message d'erreur ? Collez-le dans le décodeur : il le reconnaît et vous oriente vers la bonne fiche.
Ouvrir le décodeur