Export CSV des produits WooCommerce qui ne fonctionne pas : solutions pour BEAR
Quand l'export CSV des produits WooCommerce ne fonctionne pas dans BEAR, le symptôme indique où chercher : les boutons d'export ne font rien, la barre de progression ne bouge pas, le fichier téléchargé est vide ou périmé, le fichier contient plus de produits que le filtre n'en affichait, ou Excel l'ouvre avec des caractères illisibles. Chacun de ces cas a sa propre cause, et exporter à nouveau n'en règle aucun. Voici d'abord le déroulement d'un export, puis la solution pour chaque symptôme.
Comment se déroule un export BEAR
L'onglet Exportations (Export) fonctionne par une série de requêtes vers admin-ajax.php :
- Démarrage. Le serveur supprime les fichiers d'export précédents, crée un nouveau fichier avec la ligne d'en-tête dans
wp-content/plugins/woo-bulk-editor/ext/export/__exported_files/et, lorsqu'aucun produit n'est coché, renvoie les ID des produits correspondant au filtre actuel. - Lignes. Le navigateur envoie les produits par lots de dix. Le serveur ajoute leurs lignes ainsi que les variations des produits variables. La barre de progression compte ces lots.
- Téléchargement. Après le dernier lot, le bouton télécharger le CSV (download CSV) (ou télécharger le XML (download XML)) apparaît. Il ne pointe pas vers le fichier : il interroge le serveur, qui vérifie votre autorisation et envoie le fichier. Le dossier lui-même n'est pas accessible depuis le web.
Chaque export reçoit son propre nom de fichier : woobe_exported_, la date et l'heure, puis une fin d'apparence aléatoire. Les colonnes sont celles activées dans l'onglet Paramètres (Settings) pour votre utilisateur, dans le même ordre. L'avis en haut de l'onglet, L'export sera appliqué à (Export will be applied to), nomme les produits que le fichier contiendra.
Les boutons d'export ne font rien
Si un clic sur Exporter en CSV (Export to CSV) ne fait rien, ou masque les boutons puis s'arrête, une erreur JavaScript l'a interrompu. Appuyez sur F12, ouvrez l'onglet Console, cliquez de nouveau sur le bouton et lisez la ligne rouge.
lang.export is undefined (Firefox) ou Cannot read properties of undefined (reading 'export_is_going') (Chrome) a une cause précise. BEAR conserve les textes de son interface dans un objet JavaScript global nommé lang, et l'onglet Exportations y ajoute ses propres textes. Un thème ou une autre extension qui déclare son propre lang global plus tard sur la même page remplace l'objet de BEAR, et les textes de l'export disparaissent avec lui. Pour le confirmer, saisissez typeof lang.export dans la console : la réponse doit être "object". Cherchez ensuite le script qui l'écrase : désactivez les extensions une à une sur une copie de préproduction, ou tenez durablement le coupable à l'écart de l'éditeur comme décrit dans isoler les extensions pendant les modifications en masse. Ne modifiez pas le fichier export.js de BEAR pour retirer les textes : la prochaine mise à jour le restaure.
D'autres erreurs rouges venant d'une autre extension ou du thème peuvent aussi bloquer les scripts de l'éditeur. Si tout l'éditeur dysfonctionne, commencez par l'éditeur en masse qui ne se charge pas.
L'export ne se termine jamais, échoue avec l'erreur 500 ou télécharge un fichier vide
Quand PHP ne peut pas écrire dans le dossier d'export, la version actuelle s'arrête sans message d'erreur, et ce que vous voyez dépend de la manière dont vous avez exporté :
- Avec un filtre ou tout le catalogue : la barre de progression reste vide, seul annuler l'export (cancel export) est visible et le message Export en cours ... (Exporting ...) ne disparaît jamais.
- Avec des produits cochés : l'onglet affiche Exporté (Exported) et montre le bouton de téléchargement, mais le fichier téléchargé est vide, souvent enregistré sous le nom
admin-ajax.htm.
Le premier tableau apparaît aussi quand le filtre ne correspond à aucun produit : vérifiez donc d'abord le compteur sous le tableau. Les anciennes versions s'arrêtaient avec une erreur HTTP 500 et cette ligne dans le journal d'erreurs PHP : fputs(): Argument #1 ($stream) must be of type resource, bool given dans ext/export/export.php. La cause est la même : le fichier n'a pas pu être ouvert en écriture. Mettez BEAR à jour, puis corrigez le dossier.
Cela arrive surtout après un déménagement vers un autre hébergeur ou une restauration de sauvegarde, lorsque les fichiers appartiennent à un autre utilisateur système que celui sous lequel PHP s'exécute. Autres causes : un hébergement géré qui garde le dossier des extensions en lecture seule sur le site en production, un quota de disque plein, une restriction open_basedir. Pour corriger :
- Ouvrez
wp-content/plugins/woo-bulk-editor/ext/export/dans le gestionnaire de fichiers de l'hébergeur ou par FTP. BEAR crée__exported_filesde lui-même s'il manque, lorsqu'il en a le droit. - Assurez-vous que le dossier appartient à l'utilisateur sous lequel PHP s'exécute et qu'il a les permissions
755(fichiers644). Si vous ne pouvez pas changer le propriétaire, demandez à l'hébergeur d'autoriser PHP à y écrire. - Vérifiez le quota de disque du compte d'hébergement.
- Si le dossier est accessible en écriture et que l'export échoue toujours, activez le journal de débogage dans
wp-config.phpet lisezwp-content/debug.logaprès la tentative suivante :
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Placez ces lignes au-dessus de That's all, stop editing (la ligne « C'est tout, ne touchez plus à rien ») et retirez-les quand vous avez terminé. Le guide de débogage de WordPress les explique.
Le téléchargement est vide, périmé ou n'a pas les bonnes colonnes
- Le fichier a disparu. Les fichiers d'export sont supprimés 8 heures après leur écriture (depuis la version 2.2.3), et chaque nouvel export supprime les précédents. Le dossier est partagé : l'export d'un collègue supprime donc aussi le vôtre. Téléchargez juste après la fin de l'export et lancez les exports un par un.
- La page est trop ancienne. Le lien de téléchargement contient un jeton de sécurité WordPress créé au chargement de la page de l'éditeur. Ces jetons sont valables de 12 à 24 heures ; ensuite, le serveur n'envoie rien et le navigateur enregistre un fichier vide. Rechargez l'éditeur et exportez de nouveau.
- Toujours le même ancien fichier. Les anciennes versions téléchargeaient le fichier directement depuis le dossier de l'extension, où un cache du serveur ou d'un CDN pouvait servir une copie antérieure. Depuis la 2.2.3, chaque export a un nouveau nom et passe par
admin-ajax.phpavec des en-têtes sans cache. Si vous obtenez encore un ancien fichier, mettez BEAR à jour et vérifiez qu'aucune règle de cache ne couvre/wp-admin/ou/wp-admin/admin-ajax.php. - Colonnes erronées ou manquantes. Le fichier contient exactement les colonnes activées dans Paramètres pour l'utilisateur connecté, quoi que montrent les onglets Modifier en bloc (Bulk Edit) ou Filtres (Filters). Activez les colonnes, enregistrez, rechargez l'éditeur et exportez de nouveau. Enregistrez l'ensemble comme profil de colonnes si vous en avez souvent besoin.
Certaines colonnes diffèrent volontairement de l'éditeur, car le fichier suit le format de l'importateur de produits WooCommerce : chaque attribut devient quatre colonnes (Attribute 1 value(s), Attribute 1 name, Attribute 1 visible, Attribute 1 global), un champ meta devient Meta: suivi de sa clé, et une colonne Parent est ajoutée dès qu'une colonne d'attribut est active. L'importateur associe les colonnes par leur nom, leur ordre n'a donc pas d'importance pour l'import.
Plus de produits ou de variations que ce que le filtre affichait
L'export suit une priorité fixe : d'abord les produits cochés, puis le filtre actuel, puis tous les produits. Si vous avez coché des lignes plus tôt et les avez oubliées, l'avis indique les produits (variations) sélectionnés (the selected products (variations)) ; décochez-les avec le bouton de décochage du panneau d'outils. Si l'avis indique les produits filtrés (the filtered products) mais que le fichier contient tout le catalogue, le filtre a été perdu côté serveur entre deux requêtes. Le compteur sous le tableau saute dans ce cas, et la solution se trouve dans le filtre de l'éditeur en masse qui ne fonctionne pas.
Les variations fonctionnent différemment. Le filtre sélectionne des produits ; l'export ajoute ensuite chaque variation de chaque produit variable correspondant. Une condition comme un stock de 1 ou plus n'écarte pas les variations qui n'en ont pas. Pour restreindre les lignes de variations :
- Activez variations dans le panneau d'outils. L'onglet Exportations affiche alors un sélecteur de combinaison d'attributs : choisissez les attributs, appuyez sur Ajouter une combinaison d'attributs (Add attributes combination), sélectionnez les valeurs et réglez Inclus (In) ou Non inclus (Not in). Une combinaison doit nommer exactement chaque attribut de la variation.
- Ou cochez uniquement les lignes de variations voulues (sélectionner toutes les variations (select all variations) aide) et exportez la sélection.
- Ou écartez les variations qui ne peuvent pas être vendues depuis le stock grâce à un hook :
// Child theme functions.php or a code snippets plugin.
// BEAR export: skip variations that are not in stock.
add_filter( 'woobe_export_cut_empty_variations', '__return_true' );
Avec lui, l'export ignore les variations dont le statut de stock n'est pas En stock (In stock) (en réapprovisionnement compris) et les variations qui gèrent le stock avec une quantité de 0 ou moins. Les produits simples et les lignes parentes ne sont pas concernés. Pour d'autres modifications des valeurs exportées, il existe le filtre woobe_export_product_fields_answer, listé sur Autres réglages (implicites).
Dans la version 2.2.4, les colonnes d'attributs des lignes de variations sont écrites vides ; les valeurs n'apparaissent que sur la ligne parente. Ajoutez la colonne TITRE (Title) pour distinguer les variations (voir titres de variations avec attributs si les vôtres ne les affichent pas), et modifiez les variations dans l'éditeur plutôt que de les reconstruire à partir de ce fichier avec l'importateur WooCommerce.
Excel affiche des caractères illisibles, de mauvais prix ou des codes comme &
Le fichier est écrit en UTF-8 sans marque d'ordre des octets (BOM). Excel ouvre un tel fichier au double-clic avec la page de codes régionale de l'ordinateur : les lettres grecques, cyrilliques et accentuées deviennent du charabia, alors que le fichier est correct, et Google Sheets comme LibreOffice Calc l'affichent bien. Dans Excel, utilisez Données → À partir d'un fichier texte/CSV (Data → From Text/CSV), réglez Origine du fichier (File origin) sur 65001 : Unicode (UTF-8) (65001: Unicode (UTF-8)) et choisissez le séparateur avec lequel vous avez exporté.
- Séparateur. La liste déroulante à côté des boutons d'export propose
,;|^et~. Un fichier destiné à l'importateur WooCommerce doit utiliser une virgule ; le point-virgule n'est pratique que pour une consultation dans Excel lorsque le séparateur de liste y est un point-virgule. - Prix. Les prix sont exportés comme des nombres enregistrés avec un point, par exemple
29.90. La virgule que vous voyez dans la boutique est le format d'affichage de la devise. Dans un environnement régional à virgule décimale, appuyez sur Transformer les données (Transform Data) dans la boîte de dialogue d'import et réglez les colonnes de prix avec Modifier le type → Utiliser les paramètres régionaux (Change Type → Using Locale) sur Anglais (États-Unis). - SKU et codes. Excel supprime les zéros initiaux et transforme les longs nombres en
1.23E+12; réglez ces colonnes sur Texte dans la même boîte de dialogue. Un SKU qui contient un caractère proche du tiret autre que le trait d'union ordinaire, typiquement collé depuis un document, conserve ce caractère dans le fichier ; remplacez-le par un trait d'union dans la boutique. - Entités. Les valeurs d'attributs passent par le formatage d'affichage de WordPress, de sorte que
&apparaît sous la forme&et qu'une apostrophe peut apparaître sous la forme’. Les titres et autres textes sont écrits tels qu'ils sont enregistrés. Remplacez les entités avec Rechercher et remplacer avant de réutiliser le fichier. - Valeurs codées. État (Status) vaut
1pour publié,-1pour brouillon et0pour privé ; état du stock (Stock status) vaut1pour en stock et0pour tout le reste ; les produits suggérés et les ventes croisées sont listés par SKU, ou sous la formeid:123pour les produits qui n'en ont pas.
Liste de vérification
- BEAR est à jour, et
typeof lang.exportrépond"object"dans la console de la page de l'éditeur. ext/export/__exported_filesdans le dossier de BEAR est accessible en écriture par PHP.- L'avis L'export sera appliqué à nomme les produits attendus, et le compteur sous le tableau ne saute pas.
- Le fichier est téléchargé juste après l'export, depuis une page d'éditeur chargée le jour même.
- Excel l'ouvre via À partir d'un fichier texte/CSV en UTF-8.
Si l'export échoue toujours, ouvrez un sujet sur le forum de support de BEAR en indiquant la version de BEAR, ce que l'onglet affiche après le clic, ainsi que toute erreur de la console ou les lignes de debug.log.