Table des matières:
Pourquoi cette erreur apparaît-elle sur votre site WordPress ?
L’erreur ‘Cannot use object of type WP_Error as array’ survient lorsque vous tentez d’utiliser un objet WP_Error comme s’il s’agissait d’un tableau. Cela se produit généralement après un appel à une fonction WordPress qui retourne un objet d’erreur au lieu du résultat attendu. Par exemple, wp_remote_get() ou get_term_by() peuvent renvoyer un WP_Error en cas d’échec, et si vous tentez d’accéder à une propriété comme $result['term_id'], PHP lève cette erreur.
Identifier la source de l’erreur
Activer le débogage WordPress
Avant toute chose, activez le mode débogage dans votre fichier wp-config.php :
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Consultez ensuite le fichier wp-content/debug.log pour localiser la ligne précise qui déclenche l’erreur.
Analyser la pile d’appels
L’erreur inclut généralement une trace indiquant le fichier et la ligne concernés. Recherchez les appels à des fonctions comme wp_remote_get(), get_term_by(), get_user_by() ou wp_upload_dir() qui peuvent retourner un WP_Error.
Solutions pratiques pour corriger l’erreur
Vérifier le retour des fonctions avant utilisation
La meilleure pratique consiste à toujours vérifier si le résultat est un WP_Error avant de l’utiliser comme tableau :
$response = wp_remote_get('https://example.com/api');
if (is_wp_error($response)) {
// Gérer l'erreur
error_log('Erreur API : ' . $response->get_error_message());
return false;
}
// Maintenant on peut utiliser $response comme tableau
$body = wp_remote_retrieve_body($response);
Corriger les appels à get_term_by()
Si l’erreur provient de get_term_by(), assurez-vous de vérifier le retour :
$term = get_term_by('slug', 'mon-slug', 'category');
if (! $term || is_wp_error($term)) {
// Terme introuvable ou erreur
return;
}
$term_id = $term->term_id; // Utilisation correcte, car $term est un objet WP_Term
Note : get_term_by() retourne un objet WP_Term en cas de succès, pas un tableau. Ne tentez pas d’accéder à $term['term_id'].
Gérer les erreurs de wp_remote_get()
Pour les requêtes HTTP, utilisez toujours wp_remote_retrieve_body() et wp_remote_retrieve_response_code() après vérification :
$response = wp_remote_get('https://api.example.com/data');
if (is_wp_error($response)) {
// Journaliser l'erreur
error_log('Erreur HTTP : ' . $response->get_error_message());
return;
}
$code = wp_remote_retrieve_response_code($response);
if ($code !== 200) {
// Gérer les codes d'erreur
return;
}
$data = json_decode(wp_remote_retrieve_body($response), true);
Erreurs fréquentes et comment les éviter
- Utiliser
$result['key']sans vérifier : Toujours tester avecis_wp_error()ou! empty(). - Confondre objet et tableau : Les fonctions comme
get_term_by()renvoient un objet, pas un tableau. Utilisez$objet->propriete. - Oublier de valider les données externes : Les appels API ou les saisies utilisateur doivent être vérifiés.
- Ne pas utiliser les fonctions WordPress appropriées : Préférez
wp_remote_retrieve_body()à$response['body'].
Exemple concret : correction d’un thème ou plugin
Supposons que vous ayez ce code défectueux dans votre fichier functions.php :
$user = get_user_by('email', 'test@example.com');
echo $user['display_name']; // Erreur si $user est WP_Error
Correction :
$user = get_user_by('email', 'test@example.com');
if ($user && ! is_wp_error($user)) {
echo $user->display_name; // Utiliser -> car c'est un objet
} else {
echo 'Utilisateur introuvable.';
}
Bonnes pratiques pour éviter cette erreur à l’avenir
- Toujours vérifier les retours avec
is_wp_error()ou! empty(). - Utiliser les fonctions de rappel WordPress comme
wp_remote_retrieve_body(). - Activer
WP_DEBUGen développement pour détecter rapidement les erreurs. - Écrire du code défensif : supposez que tout peut échouer.
- Mettre à jour régulièrement thèmes et plugins pour bénéficier des correctifs.
Tableau récapitulatif des fonctions courantes et leur type de retour
| Fonction | Type de retour (succès) | Type de retour (échec) |
|---|---|---|
get_term_by() |
Objet WP_Term |
false ou WP_Error |
get_user_by() |
Objet WP_User |
false |
wp_remote_get() |
Tableau | WP_Error |
wp_upload_dir() |
Tableau | WP_Error |
FAQ : Questions fréquentes sur l’erreur WP_Error
1. Pourquoi mon code fonctionnait avant et plus maintenant ?
Cela peut venir d’une mise à jour de WordPress, d’un thème ou d’un plugin qui modifie le comportement d’une fonction. Vérifiez les journaux d’erreurs et les changelogs.
2. Comment savoir si une variable est un WP_Error ?
Utilisez is_wp_error($variable). Cette fonction retourne true si la variable est une instance de WP_Error.
3. Puis-je utiliser @ pour supprimer l’erreur ?
Non, l’opérateur @ supprime les messages d’erreur mais ne résout pas le problème sous-jacent. Il est déconseillé car il masque les erreurs.
4. Cette erreur peut-elle casser mon site ?
Oui, si elle n’est pas corrigée, elle peut afficher une page blanche ou un message d’erreur. Il est important de la résoudre rapidement.
5. Comment tester si une fonction retourne une erreur ?
Utilisez var_dump($result) ou print_r($result) pour inspecter le contenu. En mode débogage, activez l’affichage des erreurs.
6. Dois-je modifier le cœur de WordPress ?
Non, ne modifiez jamais les fichiers du cœur. Corrigez votre thème, plugin ou code personnalisé.
Recommandations pour un site WordPress stable
Pour éviter l’erreur ‘Cannot use object of type WP_Error as array’ et d’autres problèmes, adoptez ces réflexes :
- Utilisez un environnement de développement pour tester les modifications.
- Effectuez des sauvegardes régulières.
- Auditez votre code avec des outils comme PHP_CodeSniffer.
- Suivez les meilleures pratiques de développement WordPress.
Si l’erreur persiste, n’hésitez pas à consulter la documentation officielle de WordPress ou à demander de l’aide sur les forums. Un code robuste est la clé d’un site performant et sans erreur.

J’ai essayé wp_remote_get() avec une API et j’ai eu cette erreur. J’ai ajouté la vérification is_wp_error() et maintenant ça marche. Merci pour le code d’exemple !
Parfait ! Toujours vérifier avant d’utiliser le résultat. Pensez aussi à gérer les codes HTTP avec wp_remote_retrieve_response_code() pour une robustesse accrue.
Merci pour cet article ! J’ai eu cette erreur après avoir mis à jour un plugin. J’ai activé le débogage comme vous le dites et j’ai trouvé la ligne incriminée dans un fichier de thème. Super astuce de vérifier avec is_wp_error().
Content que cela vous aide ! Oui, le débogage est essentiel pour localiser l’erreur. N’hésitez pas à désactiver les plugins un par un si la source n’est pas évidente.
Et si l’erreur vient d’un plugin que je ne peux pas modifier ? Est-ce qu’il y a une solution sans toucher au code ?
Si le plugin est la source, vous pouvez contacter son développeur ou chercher une mise à jour. En attendant, désactivez le plugin et utilisez une alternative. Sinon, un filtre personnalisé dans votre thème peut parfois contourner le problème, mais c’est plus avancé.
Je ne comprends pas pourquoi get_term_by() retourne un objet et pas un tableau. Est-ce que je peux utiliser $term->term_id directement ?
Exactement, get_term_by() retourne un objet WP_Term, donc utilisez $term->term_id. L’erreur survient quand on utilise $term[‘term_id’] comme pour un tableau. La vérification avec is_wp_error() reste recommandée.