Le code traite un simple texte comme une liste et y cherche une case par son nom, par exemple $reglages[‘titre’] alors que $reglages contient une chaîne de caractères. PHP 7 répondait par l’avertissement « Illegal string offset » ; PHP 8 en fait une erreur fatale. « Uninitialized string offset » signale, lui, la lecture d’un caractère situé au-delà de la fin d’un texte.
Pourquoi cette erreur apparaît
- Un shortcode utilisé sans aucun attribut : WordPress transmet alors un texte vide au lieu d’une liste, et le code lit directement $atts[‘titre’].
- get_post_meta(), appelé avec true en dernier paramètre, renvoie un texte vide quand la métadonnée n’existe pas, alors que le code attend une liste.
- Une option enregistrée sous forme de texte, après une importation ou une migration, alors que l’extension attend un tableau.
- Un code ancien qui fonctionnait par chance sous PHP 7, où l’erreur restait un simple avertissement.
Comment corriger le problème
Trouver le fichier et l’élément affiché
Le chemin du message pointe vers le fichier fautif. S’il s’agit d’un fichier de shortcode, cherchez dans vos pages le shortcode correspondant ; s’il s’agit d’un modèle du thème, notez quelle page plante pour savoir quelle section est en cause.
Installer la version corrigée
Ce défaut est bien connu des développeurs depuis l’arrivée de PHP 8 : mettez à jour l’extension ou le thème cité, puis rechargez la page. Si l’administration ne répond plus, renommez le dossier de l’extension par FTP pour la désactiver le temps de la mise à jour.
Contrôler la donnée enregistrée
Si la page qui plante dépend d’un réglage ou d’un champ personnalisé, ouvrez-le et enregistrez-le de nouveau : l’extension réécrit alors la valeur dans le format qu’elle attend. Pour un contenu importé, comparez avec une page du même type qui fonctionne.
Normaliser la valeur avant de la lire
Dans un shortcode, shortcode_atts() fusionne les attributs reçus avec des valeurs par défaut et renvoie toujours un tableau. Ailleurs, testez is_array() avant de lire une case, ou passez la valeur dans wp_parse_args().
function bouton_appel_shortcode( $atts ) {
// Avant : $titre = $atts['titre'];
$atts = shortcode_atts(
array( 'titre' => 'Appelez-nous' ),
$atts,
'bouton_appel'
);
return esc_html( $atts['titre'] );
}
Sauvegardez le fichier avant d’y toucher, et préférez une correction dans un thème enfant ou une extension de code à une retouche de l’extension d’origine.
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