Bonjour,
Ma configuration WP actuelle: 3.6 fr multisite
– Version de WordPress : 3.6
– Version de PHP/MySQL : 5.2.x
– Thème utilisé : Lagom
– Extensions en place : cleaner-gallery-css, BNS-Corner-Logo, w4-post-list, contact-form-7, wp-email-css
– Nom de l’hebergeur : OVH
– Adresse du site :
Problème(s) rencontré(s) : erreur Warning: Invalid argument supplied for foreach () in homez.(…).www/wp-includes/query.php on line 1702
Après la mise à jour automatique de WordPress en 3.6 fr (depuis une 3.5 fr), j’ai eu cette erreur à l’affichage, y compris dans l’interface administrateur (avec des problèmes de CSS en admin: fond noir, titre h2 ombré, etc.).
La ligne 1702 incriminée dans le fichier query était la suivante:
foreach ( $GLOBALS[‘wp_taxonomies’] as $taxonomy => $t ) {
et la suite de la ligne, pour info, était
if ( ‘post_tag’ == $taxonomy )
continue;
Version courte:
La solution est de remplacer le code défectueux par
foreach ((array)$GLOBALS[‘wp_taxonomies’] as $taxonomy => $t )
Si on n’y connaît rien au PHP, comme moi, on ne sait pas trop que qu’on a fait, mais ça marche.
Version longue (pour ceux qui essaient désespérement de se mettre au PHP – oui, je fais aussi partie de cette seconde catégorie):
Après moultes recherches, j’en suis arrivé aux éléments de résolution suivants:
– le problème venait de la variable $GLOBALS qui est en fait une variable superglobale,
– le problème vient du fait que la requête foreach ne s’applique qu’à des tableaux ou des objets, ce que n’était pas la variable $GLOBALS, ce que j’ai découvert en cherchant sur le manuel PHP à foreach.
Les premiers liens que j’ai trouvé n’étaient pas très diserts, et ne s’adressait vraiment qu’à des développeurs PHP, mais j’ai fini par comprendre qu’il fallait soit que $GLOBALS soit un tableau ou un objet, soit que la requête foreach puisse passer outre.
J’ai finalement trouvé deux solutions, ici et là, mais seule la deuxième a marché pour moi (je n’ai pas su exactement où mettre le code de la première, notamment où mettre l’accolade fermante), et encore, celle proposée dans la discussion… J’ai donc modifié le code
foreach ( $GLOBALS[‘wp_taxonomies’] as $taxonomy => $t )
en
foreach ((array)$GLOBALS[‘wp_taxonomies’] as $taxonomy => $t )
, et l’erreur a disparu. J’aurais bien aimé savoir emballer (wrap) foreach dans une condition if array, mais ce sera pour une prochaine fois…