Le code veut lire une information d’un objet, par exemple l’identifiant d’un article ($post->ID), mais la variable est vide : null, false ou une simple valeur. En lecture, PHP 8 affiche cet avertissement et continue ; PHP 7 disait « Trying to get property of non-object ». En écriture (« Attempt to assign property »), c’est en revanche une erreur fatale qui bloque la page.
Pourquoi cette erreur apparaît
- Le contenu demandé n’existe plus : article, page, catégorie ou produit supprimé, alors qu’un menu, un widget ou un bloc y fait encore référence.
- Un modèle du thème utilise l’article courant sur une page qui n’en a pas, comme la page 404 ou une archive vide.
- Une fonction de recherche (get_term_by, get_user_by, wc_get_product) a renvoyé false faute de résultat, et le code ne l’a pas vérifié.
- Une extension relit un objet rangé dans une option qui a été perdue ou abîmée lors d’une migration.
Comment corriger le problème
Repérer les pages qui déclenchent le message
Notez sur quelles pages l’avertissement apparaît. S’il ne se montre que sur une catégorie, un produit ou la page d’erreur 404, la cause est le plus souvent un contenu absent ou supprimé, plutôt qu’un défaut général du site.
Rétablir le contenu manquant
Passez en revue ce que la page appelle : un article mis à la corbeille, une catégorie renommée, une image effacée, un produit retiré. Le restaurer depuis la corbeille, ou retirer le lien du menu ou du widget concerné, fait souvent disparaître l’avertissement.
Mettre à jour le thème ou l’extension
Si le chemin du message mène à un thème ou à une extension, installez sa version la plus récente. Pour la variante « Attempt to assign property », qui bloque la page, désactivez d’abord l’extension en renommant son dossier si l’administration ne répond plus.
Ne plus montrer le message aux visiteurs
Un site en ligne ne doit pas afficher ses avertissements. Le réglage display_errors de PHP peut être désactivé dans l’espace client de la plupart des hébergements, et WP_DEBUG doit valoir false dans wp-config.php en dehors des périodes de diagnostic.
Vérifier l’objet avant de s’en servir
Dans votre code, assurez-vous que l’objet existe et qu’il est du bon type avant de lire ses propriétés. Attention : l’opérateur ?-> de PHP 8 ne protège que contre null, pas contre false, que renvoient beaucoup de fonctions WordPress.
$terme = get_term_by( 'slug', 'actualites', 'category' );
// Avant : echo $terme->name;
if ( $terme instanceof WP_Term ) {
echo esc_html( $terme->name );
}
Avant de restaurer un contenu ou de modifier un modèle du thème, faites une sauvegarde complète du site, base de données comprise.
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