L'éditeur en masse WooCommerce ne se charge pas : spinner bloqué, erreur DataTables
Un éditeur en masse WooCommerce qui ne se charge pas se manifeste de trois façons : l'animation de chargement ne disparaît jamais, un message DataTables warning s'affiche et le tableau reste vide, ou bien la page apparaît mais le tableau est cassé ou vide, souvent juste après une mise à jour. BEAR lui-même change rarement d'un jour à l'autre ; la cause est donc généralement quelque chose qui, lui, a changé : une mise à jour d'extension ou de thème, un script en cache, un réglage du serveur, ou un produit dont les données ne peuvent pas être envoyées au navigateur. Voici comment la page de l'éditeur se charge, comment voir en quelques minutes quelle étape échoue, et la solution pour chaque cas.
Comment la page de l'éditeur se charge
L'ouverture de Produits > BEAR Bulk Editor (Products > BEAR Bulk Editor) exécute deux étapes :
- La page arrive avec les panneaux (Filtres, Modification groupée, Export, Paramètres) déjà construits côté serveur, derrière une animation de chargement. Les scripts de l'éditeur démarrent ensuite dans le navigateur, installent les panneaux et le tableau, et masquent l'animation. Une erreur JavaScript pendant ce démarrage arrête le script avant qu'il y parvienne, et l'animation reste affichée indéfiniment.
- Le tableau demande au serveur les lignes de la première page : une requête POST vers
/wp-admin/admin-ajax.phpavecaction=woobe_get_products. La réponse est un JSON qui commence par{"draw":. Si c'est autre chose, la bibliothèque du tableau s'arrête et affiche son avertissement : Invalid JSON response lorsque le serveur a répondu par autre chose que du JSON, Ajax error lorsque le serveur a répondu avec un code d'erreur.
Il vous faut donc deux outils du navigateur, tous deux sous F12 (Cmd+Option+I sur Mac) : la Console pour l'étape 1 et l'onglet Réseau (Network) pour l'étape 2.
Premières vérifications après une mise à jour
- Mettez à jour BEAR, WooCommerce et WordPress vers les versions actuelles. Un ancien BEAR sur un WordPress ou un WooCommerce récent est une cause fréquente de page cassée.
- Videz complètement le cache du navigateur, pas seulement les cookies, et rechargez avec Ctrl+F5. La FAQ comment réinitialiser le cache des pages dans le navigateur montre comment faire. Purgez ensuite tous les caches côté serveur : l'extension de cache, le cache de l'hébergeur, le CDN.
- Ouvrez l'éditeur dans une fenêtre privée, puis dans un second navigateur. Si cela fonctionne, le problème se situe dans le premier navigateur : son cache, une extension, ou une redirection mémorisée.
Les fichiers de script de BEAR portent la version de l'extension dans leur adresse ; après une mise à jour, le navigateur récupère donc normalement les nouveaux. Ce qui maintient l'ancien code en vie, c'est une couche d'optimisation qui combine ou minifie les scripts d'administration dans ses propres fichiers, comme les extensions de type Autoptimize, les modules d'optimisation du serveur ou les fonctions de Cloudflare, et continue de servir le fichier combiné construit avant la mise à jour. Excluez /wp-admin/ de ces fonctions.
Erreurs dans la console du navigateur
Rechargez la page de l'éditeur avec la Console ouverte et lisez les lignes rouges. Le nom de fichier à droite de chaque erreur indique à qui appartient le code.
jQuery.growl is not a function,wpColorPicker is not a functionet similaires. BEAR charge ses modules complémentaires jQuery, et ils ont disparu au moment où son script s'exécute. Généralement, une autre extension ou le thème charge une seconde copie de jQuery sur les pages d'administration, ce qui remplace celle à laquelle les modules étaient rattachés, ou un optimiseur a modifié l'ordre des scripts.- Erreurs provenant du fichier d'une autre extension. Une seule erreur de script peut arrêter tous les scripts qui s'exécutent après elle sur la page. Corrigez ou retirez l'extension qui la provoque.
Maximum call stack size exceeded. Le navigateur a manqué de pile pendant la construction de l'interface. Cela arrive sur les boutiques qui comptent un très grand nombre de taxonomies ou de termes : chaque taxonomie de produits avec tous ses termes est dessinée dans les panneaux Filtres et Modification groupée. Les panneaux dessinent les taxonomies quelles que soient les colonnes activées ; la solution consiste donc à en écarter les taxonomies lourdes avec les filtres de code expliqués dans modifier en masse des milliers de produits WooCommerce. Ils se placent dans le thème ou dans une extension de snippets, et fonctionnent donc même quand l'éditeur ne s'ouvre pas.
Pour trouver quelle extension est responsable, désactivez tout sauf WooCommerce et BEAR sur une copie de préproduction, vérifiez que l'éditeur se charge, puis activez les autres une par une en consultant la console à chaque fois. Isoler les extensions pendant les modifications en masse montre comment tenir à l'écart des requêtes de l'éditeur une extension dont vous avez besoin, sans la désactiver pour tout le site.
DataTables warning : Invalid JSON response ou Ajax error
Dans l'onglet Réseau, saisissez admin-ajax dans le champ de filtre, rechargez, et cliquez sur la requête dont les données envoyées contiennent woobe_get_products. Lisez son statut et son onglet Réponse (Response).
| Ce que montre la requête | Ce que cela signifie |
|---|---|
200, texte ou HTML avant {"draw": | Quelque chose a écrit du texte dans la réponse : une notice ou un avertissement PHP, ou du HTML venant d'une extension. Le texte en désigne la source. |
| 200 avec une réponse vide | Les lignes n'ont pas pu être encodées en JSON, généralement à cause d'un texte dans un encodage corrompu |
200 avec seulement 0 | La vérification de sécurité a refusé la requête : rechargez la page ; si cela persiste, le compte n'a pas la capacité manage_woocommerce |
| 403 | Un pare-feu ou une règle de sécurité a bloqué admin-ajax.php |
| 500 | Une erreur fatale PHP pendant la construction des lignes |
| 502, 504, ou en attente pendant longtemps | Le serveur a manqué de temps : trop de lignes ou de variations sur la page, ou une extension lente accrochée à la requête |
Sortie avant le JSON et erreurs PHP
Les notices écrites dans la réponse proviennent de WP_DEBUG activé avec l'affichage, ou d'une extension qui affiche du texte dans les requêtes d'administration. Enregistrez plutôt les erreurs dans un fichier au lieu de les afficher, dans wp-config.php, au-dessus de la ligne qui indique d'arrêter les modifications :
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Rechargez l'éditeur, puis ouvrez wp-content/debug.log. La dernière PHP Fatal error ou le dernier avertissement indique le fichier, et son chemin indique l'extension ou le thème. Une extension de consultation des journaux telle qu'Error Log Monitor ou Query Monitor affiche la même chose dans wp-admin. Le guide de débogage de WordPress explique les options.
Deux causes reviennent sans cesse. Allowed memory size exhausted signifie que la requête a besoin de plus de mémoire PHP que le serveur ne lui en donne ; réduisez Nombre de produits par page par défaut (Default products count per page) dans l'onglet Paramètres (Settings) et consultez la section sur la mémoire de l'article sur les grands catalogues indiqué plus haut. Et un fichier de traduction corrompu : passez la langue de votre profil en anglais dans Utilisateurs > Profil (Users > Profile) et rechargez. Si l'éditeur s'ouvre, cherchez dans wp-content/languages/plugins/ les fichiers nommés woo-bulk-editor- suivi de votre langue. Un fichier présent là prend le pas sur la traduction fournie avec BEAR ; supprimez-le, et BEAR revient à la sienne.
Une réponse vide : un produit fait échouer la page
Si l'éditeur se charge avec certains filtres et échoue avec d'autres, ou échoue sur une page du tableau, un produit contient un texte qui ne peut pas être encodé : un titre, un attribut ou un nom de catégorie aux caractères corrompus après un import ou une migration ratée, ou des noms d'attributs qui contiennent encore des balises HTML et des liens de l'ancienne boutique. Réglez 10 lignes par page et parcourez les pages ; celle qui échoue le contient. Corrigez le texte sur l'écran d'édition du produit lui-même, ou dans Produits > Attributs (Products > Attributes) et Catégories (Categories), et le tableau se charge de nouveau.
403 : admin-ajax.php est bloqué
Tout l'éditeur fonctionne par admin-ajax.php. Des règles dans .htaccess, le pare-feu d'une extension de sécurité, un pare-feu de l'hébergeur ou une règle de CDN qui le bloquent ou le soumettent à un défi cassent le tableau et chaque enregistrement. Trouvez la règle dans le journal de ce qui a bloqué la requête et autorisez-la.
Quand la page elle-même ne s'ouvre pas
- 404 dans un navigateur, mais cela fonctionne en fenêtre privée. Le navigateur a mémorisé une ancienne redirection pour l'adresse de l'éditeur. Supprimer les cookies ne l'efface pas ; videz aussi les images et fichiers en cache. Si cela échoue dans tous les navigateurs, ouvrez Réglages > Permaliens (Settings > Permalinks) et appuyez sur Enregistrer les modifications (Save Changes) pour reconstruire les règles de réécriture, et vérifiez les extensions de redirection et les règles
.htaccessconcernant les adresses/wp-admin/. - Pas d'entrée BEAR Bulk Editor dans le menu Produits. L'éditeur est affiché aux utilisateurs qui possèdent la capacité WooCommerce
manage_woocommerce; les administrateurs et les gestionnaires de boutique l'ont par défaut, les autres rôles seulement si on la leur a accordée. - La page se charge, mais les produits variables manquent ou les compteurs semblent faux. Certains thèmes et extensions modifient les requêtes de produits partout, y compris dans les requêtes d'administration. Les options de thème qui affichent les variations comme des produits distincts, comme celle de Woodmart, en sont un exemple. Désactivez l'option pendant vos modifications, ou demandez aux auteurs du thème de la tenir à l'écart des requêtes AJAX d'administration.
Il s'est chargé, mais il manque quelque chose
Certaines choses semblent cassées et ne le sont pas :
- Le bouton Effectuer la modification groupée (Do Bulk Edit) n'apparaît qu'après que vous avez coché au moins un champ dans l'onglet Modification groupée.
- Le bouton Nouveau produit (New Product) du panneau d'outils est masqué tant qu'un filtre est actif ; réinitialisez le filtre pour le voir.
- Les panneaux Filtres, Modification groupée et Export s'ouvrent avec le bouton Afficher : Filtres/Modification groupée/Export (Show: Filters/Bulk Edit/Export) au-dessus du tableau.
- Les colonnes que vous avez désactivées dans l'onglet Paramètres ne sont ni affichées ni exportées. La documentation de l'Éditeur de produits (Products Editor) décrit le tableau et son panneau d'outils.
Liste de contrôle
- BEAR, WooCommerce et WordPress sont à jour ; les caches du navigateur et du serveur sont vidés.
- La console n'affiche aucune erreur rouge sur la page de l'éditeur, ou l'extension qui les provoque est identifiée.
- La requête
woobe_get_productsrenvoie 200 et une réponse qui commence par{"draw":. WP_DEBUG_DISPLAYest désactivé etdebug.logne contient aucune erreur fatale depuis le dernier rechargement./wp-admin/etadmin-ajax.phpsont exclus de la mise en cache, de l'optimisation des scripts et des défis du pare-feu.
Si ces cinq points sont vérifiés et que l'éditeur ne se charge toujours pas, ouvrez un sujet sur le forum d'assistance de BEAR en indiquant la version de BEAR, les erreurs de la console, ainsi que le statut et les premières lignes de la réponse de woobe_get_products.