Le code lit une case précise d’un tableau, repérée par un nom (« page ») ou par un numéro, et cette case n’existe pas. PHP 8 le signale par un avertissement (Warning) ; PHP 7 parlait de « Undefined index » pour un nom et de « Undefined offset » pour un numéro, sous forme de simple notice. La page s’affiche quand même, avec une valeur vide à cet endroit.
Pourquoi cette erreur apparaît
- Le code lit un paramètre d’adresse ou de formulaire ($_GET, $_POST) qui n’est pas toujours envoyé.
- Une information transmise par le navigateur, comme HTTP_REFERER, manque : elle n’est pas toujours fournie.
- Une extension a ajouté un réglage, mais l’option enregistrée sur votre site date de l’ancienne version et ne le contient pas.
- Un fichier importé (CSV, flux) compte moins de colonnes que prévu.
- Le passage de PHP 7 à PHP 8 a transformé ces notices discrètes en avertissements, affichés plus souvent.
Comment corriger le problème
Relever la clé et le fichier
Le nom entre guillemets, ou le numéro, est la case introuvable ; le chemin qui suit désigne le code qui la cherche. Une clé comme HTTP_REFERER ou page renvoie à une lecture de l’adresse ou du navigateur, un nom de réglage plutôt à une extension.
Mettre à jour puis enregistrer les réglages
Installez la dernière version du thème ou de l’extension cité. Ouvrez ensuite sa page de réglages et cliquez sur Enregistrer, même sans rien changer : l’option est souvent réécrite avec toutes les clés de la version actuelle.
Garder un affichage propre en production
Sur un site public, WP_DEBUG doit rester à false dans wp-config.php. Si l’avertissement s’affiche malgré tout, c’est le réglage display_errors de l’hébergement qui est activé : désactivez-le dans le gestionnaire de PHP de l’espace client.
define( 'WP_DEBUG', false );
Lire la clé avec une valeur de secours
Dans votre code, l’opérateur ?? (disponible depuis PHP 7) renvoie une valeur par défaut quand la case n’existe pas, sans avertissement. isset() et array_key_exists() permettent aussi de tester avant de lire.
// Avant : $page = $_GET['page'];
$page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : '';
// Avant : $source = $_SERVER['HTTP_REFERER'];
$source = $_SERVER['HTTP_REFERER'] ?? '';
Gardez une copie des fichiers que vous modifiez et faites vos corrections dans un thème enfant, jamais dans les fichiers d’une extension tierce.
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