PHP 8.2 déconseille d’ajouter à un objet une propriété que sa classe n’a pas déclarée. Le code fonctionne toujours : c’est un avis de dépréciation (Deprecated), pas une erreur. Il prévient qu’une future version majeure de PHP refusera cette pratique, et que le thème ou l’extension cité devra être adapté d’ici là.
Pourquoi cette erreur apparaît
- Une extension ou un thème écrit avant PHP 8.2 range des informations dans ses objets sans les déclarer.
- L’hébergement est passé à PHP 8.2 ou à une version plus récente, et le code n’a pas encore suivi.
- Le mode débogage de WordPress est activé, ce qui rend visibles les avis Deprecated, masqués sinon.
Comment corriger le problème
Faire la différence entre un avis et une panne
Deprecated signifie « déconseillé ». Si votre site fonctionne normalement, aucune donnée n’est menacée et aucune fonction n’est cassée par cet avis : vous pouvez le traiter sans précipitation.
Chercher une mise à jour
Les versions récentes déclarent souvent leurs propriétés. Mettez à jour l’extension ou le thème qui figure dans le chemin du message, puis rechargez la page pour vérifier que l’avis a disparu.
Couper l’affichage des avis en production
Quand WP_DEBUG vaut false, WordPress n’affiche plus les avis Deprecated. S’ils apparaissent sur votre site en ligne, ouvrez wp-config.php : le mode débogage y a sans doute été laissé actif après une intervention.
define( 'WP_DEBUG', false );
Prévenir l’éditeur
Si aucune mise à jour ne règle l’avis, signalez-le au support de l’extension ou du thème en copiant le message complet, chemin et numéro de ligne compris : la correction est simple pour qui connaît le code.
Déclarer la propriété dans la classe
Pour votre propre code, déclarez la propriété en tête de classe. Si la classe doit vraiment accepter des propriétés libres, l’attribut #[AllowDynamicProperties] lève l’avis, mais c’est une solution d’attente. Les objets stdClass et les classes qui gèrent __set() ne sont pas concernés.
class Mon_Extension_Admin {
// Propriété déclarée : plus d'avis
public $settings = array();
public function __construct() {
$this->settings = get_option( 'mon_extension_settings', array() );
}
}
Ne modifiez pas les fichiers d’une extension tierce pour faire taire l’avis, car la prochaine mise à jour effacerait votre retouche ; sauvegardez votre propre code avant de le corriger.
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