« Cannot access offset of type string on string » : erreur PHP 8 sur WordPress

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

BloquantCompatibilité PHP 8
Le message affiché
Fatal error: Uncaught TypeError: Cannot access offset of type string on string
Autres formulations du même message 4
  • PHP Fatal error: Uncaught TypeError: Cannot access offset of type string on string
  • Warning: Illegal string offset 'title'
  • Warning: Uninitialized string offset 3
  • Notice: Uninitialized string offset: 3

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