« Warning: Undefined variable » : variable indéfinie sous PHP 8 dans WordPress

Fiche du décodeur d'erreurs, mise à jour le 12 octobre 2026

AvertissementCompatibilité PHP 8
Le message affiché
Warning: Undefined variable $post
Autres formulations du même message 4
  • PHP Warning: Undefined variable $post
  • Notice: Undefined variable: post
  • PHP Notice: Undefined variable: post
  • Warning: compact(): Undefined variable $classes

Le code utilise une variable, une case mémoire repérée par un $, avant de lui avoir donné une valeur. Sous PHP 8, c’est un avertissement (Warning) ; PHP 7 en faisait une simple notice. La page continue de s’afficher, avec un vide là où la variable servait. Ce n’est pas une panne : il faut cacher le message aux visiteurs, mais le vrai remède reste une mise à jour du thème ou de l’extension cité.

Pourquoi cette erreur apparaît

  • La variable n’est remplie que dans certains cas : option jamais enregistrée, champ laissé vide, type de page que le code n’avait pas prévu.
  • Le code a été écrit pour PHP 7, où ce défaut produisait une notice que WordPress masque d’office ; PHP 8 en fait un avertissement, qui n’est plus filtré.
  • Le réglage display_errors de l’hébergement est actif : PHP écrit alors ses avertissements directement dans la page.
  • Une faute de frappe dans le nom de la variable, dans un code personnalisé ou un modèle de thème enfant.

Comment corriger le problème

Évaluer ce que le message empêche vraiment

Ce message ne bloque rien : il signale une maladresse dans le code. Notez le nom de la variable, après le $, et le chemin : le dossier qui suit wp-content/themes ou wp-content/plugins désigne le responsable. Regardez ensuite, à l’endroit concerné de la page, si un titre, un texte ou une image manque.

Mettre à jour le thème ou l’extension

Installez la dernière version de l’élément cité dans le chemin. S’il n’en existe pas de plus récente, envoyez le message complet à son éditeur : la correction tient souvent en une ligne de son côté.

Ne plus afficher l’avertissement aux visiteurs

Quand WP_DEBUG vaut false, WordPress laisse le serveur décider : c’est son réglage display_errors qui affiche ces avertissements. Passez-le à Off dans le gestionnaire PHP de votre hébergement, ou ajoutez la dernière ligne ci-dessous dans wp-config.php. Pour garder une trace pendant la correction, activez en plus le débogage sans affichage (WP_DEBUG_DISPLAY à false, WP_DEBUG_LOG à true), en modifiant la ligne WP_DEBUG existante au lieu d’en ajouter une seconde.

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

Donner une valeur de départ à la variable

Dans votre thème enfant ou votre code, initialisez la variable avant les conditions qui la remplissent. Pour une variable qui peut ne pas exister du tout, l’opérateur ?? fournit une valeur de secours sans déclencher l’avertissement.

$titre_section = '';
if ( is_category() ) {
	$titre_section = single_cat_title( '', false );
}
echo esc_html( $titre_section );

// Variable qui peut manquer :
echo esc_html( $sous_titre ?? '' );

Gardez une copie de wp-config.php et des fichiers du thème avant de les modifier, et faites vos corrections dans un thème enfant pour qu’une mise à jour ne les efface pas.

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