BEAR - WooCommerce Bulk Editor and Products Manager Professional

Mettre à jour des produits WooCommerce existants par import CSV, sans risque

Pour mettre à jour des produits WooCommerce existants par import CSV, exportez-les depuis BEAR, modifiez les valeurs dans un tableur et chargez le fichier dans l'importateur de produits WooCommerce en cochant Mettre à jour les produits existants (Update existing products). L'aller-retour fonctionne, mais l'export et l'importateur ne parlent pas tout à fait le même langage : plusieurs colonnes doivent être associées à la main, certaines valeurs vides sont écrites sous la forme 0, et l'importateur écrit chaque cellule associée, y compris les vides. Fait sans précaution, un seul import peut mettre des produits en promotion à zéro, activer la gestion du stock, masquer des attributs ou supprimer les attributs sur lesquels reposent les variations. Voici la procédure qui évite tout cela.

Comment un import CSV met à jour des produits WooCommerce existants

BEAR n'a pas son propre moteur d'import. Le bouton Importer depuis CSV (Import from CSV) de l'onglet Exportations (Export) ouvre l'importateur WooCommerce standard (Produits → Importer (Products → Import)) dans un nouvel onglet du navigateur : une mise à jour suit donc les règles de WooCommerce :

  • Avec Mettre à jour les produits existants coché, chaque ligne est associée à un produit ou à une variation par sa cellule ID, ou par le SKU lorsque la cellule ID est vide ou que le fichier n'a pas de colonne ID. Les lignes qui ne correspondent à rien sont ignorées avec le message Aucun produit correspondant à mettre à jour (No matching product exists to update).
  • Sans cette case cochée, l'importateur crée des produits, et les lignes dont l'ID ou le SKU existe déjà sont ignorées avec le message Un produit avec cet ID existe déjà (A product with this ID already exists) (ou ce SKU).
  • Les produits qui ne figurent pas dans le fichier ne sont pas touchés, et rien n'est supprimé. Un fichier de cinq lignes modifie cinq produits.
  • Chaque colonne associée est écrite sur chaque ligne, et une cellule vide dans une colonne associée efface la valeur : un TARIF PROMO (Sale price) vide supprime la promotion. Une colonne réglée sur Ne pas importer (Do not import) laisse le champ tel quel.

La dernière règle est la clé d'une mise à jour sûre : ne mettez dans le fichier que ce que vous allez modifier, plus ID, et n'associez rien d'autre. Faites une sauvegarde avant la première exécution. L'importateur ne passe pas par BEAR, donc l'onglet Historique (History) de BEAR ne peut pas annuler ce qu'un import a modifié.

N'exportez que les colonnes que vous allez modifier

  1. Filtrez ou cochez les produits dans BEAR. Pour un produit variable, l'export ajoute chaque variation, chacune sur sa propre ligne avec son propre ID.
  2. Dans Paramètres (Settings), activez ID et les colonnes que vous voulez modifier, par exemple TARIF RÉGULIER (Regular price) et TARIF PROMO, et désactivez les autres. Le fichier contient exactement les colonnes actives, dans le même ordre. Enregistrez l'ensemble sous Profils de colonnes (Columns profiles) pour obtenir chaque fois un fichier identique.
  3. Laissez les colonnes d'attributs désactivées, sauf si le travail consiste à modifier des attributs ; la section sur les variations explique pourquoi.
  4. Gardez la virgule dans la liste déroulante du séparateur, appuyez sur Exporter en CSV (Export to CSV), puis sur télécharger le CSV (download CSV).

Export et import dans l'éditeur en masse : association des colonnes

BEAR nomme les colonnes comme le fait son éditeur. L'importateur reconnaît ses propres noms et quelques noms courants, et liste tout le reste sous Ne pas importer. Dans une administration en anglais, ces colonnes sont associées d'elles-mêmes : ID, TITRE (Title) (vers Nom (Name)), SKU, Type, description (Description), TARIF RÉGULIER, TARIF PROMO, statut fiscal (Tax status), Classe de TVA (Tax class), Catégories (Categories), Étiquettes (Tags), Classe d'expédition (Shipping class), Produits suggérés (Upsells), Ventes croisées (Cross-sells), Groupes de produits (Grouped products), Note de commande (Purchase note), ORDRE DU MENU (Menu order) (vers Position), limite de téléchargement (Download limit), Parent, les colonnes Attribute N, les colonnes Download N et chaque colonne Meta:. Dans les autres langues d'administration, moins de colonnes correspondent. Pour le reste, choisissez le champ dans Associer au champ (Map to field) :

Colonne BEARAssocier au champValeurs dans le fichier
Description courte (Short Desc.)Description courte (Short description)Texte tel qu'enregistré
État (Status)Publié (Published)1 publié, -1 brouillon, 0 privé
Mis en avant (Featured)Mis en avant ? (Is featured?)1 ou 0
Visibilité du catalogue (Catalog Visibility)Visibilité dans le catalogue (Visibility in catalog)visible, catalog, search, hidden
Début de la promotion, fin de la promotion (Sale time from, Sale time to)Date de début du tarif promo, date de fin du tarif promo (Date sale price starts, Date sale price ends)Date seule, heure 0:00:00
Quantité en stock (Stock quantity)StockNombre ; voir la section suivante
état du stock (Stock status)En stock ? (In stock?)1 en stock, 0 tout le reste
Autoriser les commandes en réapprovisionnement (Allow backorders)Commandes en réapprovisionnement autorisées ? (Backorders allowed?)1, 0 ou notify
Vendu individuellement (Sold individually)Vendu individuellement ? (Sold individually?)1 ou 0
Poids, Longueur, Largeur, Hauteur (Weight, Length, Width, Height)Poids, Longueur, Largeur, Hauteur (Weight, Length, Width, Height), dans les unités de votre boutiqueNombre
Avis autorisés (Reviews allowed)Autoriser les avis clients ? (Allow customer reviews?)1 ou 0
URL du produit, texte du bouton d'affiliation (Product url, Aff.Button text)URL externe, texte du bouton (External URL, Button text)Texte
Expiration du téléchargement (Download expiry)Jours avant expiration du téléchargement (Download expiry days)Nombre, -1 pour jamais

Certaines colonnes n'ont pas d'équivalent dans l'importateur : Slug, Gérer le stock (Manage stock), Téléchargeable (Downloadable) et Virtuel (Virtual) (la colonne Type porte déjà ces deux dernières sous la forme simple, downloadable, virtual), Auteur (Author), Date de publication (Date Published), Total des ventes (Total sales), Nombre d'avis (Review count), Évaluation moyenne (Average rating) et Visibilité de l'attribut (Attribute visibility). Laissez-les sur Ne pas importer. Il en va de même pour Miniature (Thumbnail) et galerie (Gallery) : l'importateur n'a qu'une seule colonne Images (image mise en avant d'abord, puis la galerie), alors que BEAR en exporte deux ; modifiez donc les images dans l'éditeur.

Deux autres points sur cet écran. La ligne d'en-tête d'un fichier BEAR se termine par un séparateur, la liste se termine donc par une colonne supplémentaire sans nom ; elle est vide, laissez-la sur Ne pas importer. Et les champs meta qui contiennent des listes ou des données structurées (ceux que BEAR modifie dans une fenêtre) sont exportés sous forme de texte JSON, que l'importateur enregistrerait comme une simple chaîne à la place des données d'origine. N'importez pas ces colonnes ; modifiez-les comme décrit dans Champs meta (Meta Fields).

Valeurs vides, zéros et -1 : ce que l'importateur en fait

BEAR 2.2.4 écrit les colonnes numériques sous forme de nombres même lorsque le produit n'a pas de valeur : un TARIF RÉGULIER, TARIF PROMO, Quantité en stock (Stock quantity), Poids (Weight), Longueur (Length), Largeur (Width) ou Hauteur (Height) vide devient 0 dans le fichier. L'importateur prend ce zéro au pied de la lettre :

  • Un tarif promo à 0 met le produit en promotion à 0, et la boutique le vend gratuitement. Avant l'import, filtrez la colonne TARIF PROMO sur la valeur 0 dans le tableur et supprimez ces valeurs : une cellule vide signifie qu'il n'y a pas de tarif promo. Faites de même dans TARIF RÉGULIER pour les produits qui n'ont aucun prix.
  • Un stock à 0 active la gestion du stock avec une quantité de 0 : un produit qui ne suivait pas le stock passe donc en rupture de stock, et la ligne propre d'un produit variable active la gestion du stock au niveau du produit. Une cellule vide fait l'inverse : elle désactive la gestion du stock. Exportez Gérer le stock avec Quantité en stock, videz la quantité sur chaque ligne où Gérer le stock vaut 0, et associez Gérer le stock à Ne pas importer.
  • Un poids et des dimensions à 0 remplacent des valeurs vides par 0. Videz-les, ou n'importez pas ces colonnes.
  • -1 supprime un tarif promo uniquement dans l'onglet Modification groupée (Bulk Edit) propre à BEAR, comme dans supprimer les prix promotionnels en masse. L'importateur enregistre -1 comme un prix promo négatif, et le prix du produit devient -1. Dans un CSV, une cellule vide est le moyen de supprimer une promotion.

D'autres valeurs méritent aussi un coup d'œil. état du stock est exporté sous la forme 1 pour en stock et 0 pour tout le reste : les produits en réapprovisionnement reviennent donc en rupture de stock ; écrivez backorder dans leurs cellules. Les produits en attente et programmés sont exportés avec les mots pending et future dans État (Status), que l'importateur lit comme 0 et qui rendent les produits privés ; laissez État sur Ne pas importer si vous en avez. Les dates de promotion sont exportées sans leur heure : une promotion qui commence ou se termine à une heure précise est donc ramenée à minuit ; n'importez pas ces colonnes, sauf si vous modifiez les dates.

Si vous faites régulièrement cet aller-retour, laissez l'export écrire lui-même les cellules vides et la vraie visibilité des attributs (expliquée dans la section suivante). Ce filtre ne modifie que les valeurs de l'export CSV. Placez-le dans le functions.php du thème enfant ou dans une extension de snippets de code :

/**
 * BEAR CSV export: write empty prices, stock quantity, weight and dimensions
 * as empty cells instead of 0, and the product's own attribute visibility,
 * so the file can be imported back with the WooCommerce importer.
 */
add_filter( 'woobe_export_product_fields_answer', function ( $answer, $product_id, $fields ) {
	$product = wc_get_product( $product_id );
	if ( ! $product ) {
		return $answer;
	}

	$getters = array(
		'regular_price'  => 'get_regular_price',
		'sale_price'     => 'get_sale_price',
		'stock_quantity' => 'get_stock_quantity',
		'weight'         => 'get_weight',
		'length'         => 'get_length',
		'width'          => 'get_width',
		'height'         => 'get_height',
	);

	// How many CSV cells each column takes: an attribute takes 4,
	// the downloads column takes whatever is left over.
	$widths = array();
	foreach ( $fields as $key => $field ) {
		if ( '__checker' === $key ) {
			continue;
		}
		$widths[ $key ] = ( 'attribute' === $field['field_type'] ) ? 4 : 1;
	}
	if ( isset( $widths['download_files'] ) ) {
		$widths['download_files'] = count( $answer ) - array_sum( $widths ) + 1;
	}

	$index = 0;
	foreach ( $widths as $key => $width ) {
		if ( isset( $getters[ $key ] ) ) {
			$value = $product->{ $getters[ $key ] }( 'edit' );
			if ( null === $value || '' === $value ) {
				$answer[ $index ] = '';
			}
		}

		// Attribute "visible" cell: the product's own setting.
		if ( 4 === $width && '' !== $answer[ $index ] && ! $product->is_type( 'variation' ) ) {
			$attributes = $product->get_attributes();
			if ( isset( $attributes[ $key ] ) ) {
				$answer[ $index + 2 ] = $attributes[ $key ]->get_visible() ? 1 : 0;
			}
		}

		$index += $width;
	}

	return $answer;
}, 10, 3 );

Avec le filtre actif, un fichier exporté puis réimporté sans modification laisse les prix, le stock et la visibilité des attributs exactement comme ils étaient. Un stock géré de 0 reste à 0, car seules les valeurs manquantes sont vidées.

L'import CSV a supprimé des attributs ou des variations : comment l'éviter

L'importateur traite les attributs ligne par ligne, et il remplace la liste d'attributs d'un produit au lieu de s'y ajouter :

  • Lorsqu'une ligne de produit a une valeur dans une cellule Attribute N value(s), les attributs du produit deviennent exactement ceux du fichier. Un attribut qui n'a pas de colonne, ou une cellule vide sur cette ligne, est retiré du produit, y compris les attributs sur lesquels reposent les variations. Les variations perdent alors ces valeurs et s'affichent dans la boutique comme Any Size ou Any Color.
  • Lorsque toutes les cellules d'attributs d'une ligne sont vides, les attributs du produit ne sont pas touchés.
  • Une cellule de valeurs est la liste complète des termes de ce produit, séparés par des virgules. Une valeur qui n'existe pas encore comme terme est créée : une faute de frappe devient donc un nouveau terme.
  • BEAR n'exporte que les attributs globaux (Produits → Attributs (Products → Attributes)). Les attributs personnalisés saisis sur la page du produit ne peuvent pas figurer dans le fichier : un import contenant une valeur d'attribut les supprime donc. Rendez-les d'abord globaux, comme dans convertir des attributs personnalisés en attributs globaux.
  • Attribute N visible correspond à la case Visible sur la page produit (Visible on the product page). BEAR 2.2.4 y écrit le réglage Activer les archives ? (Enable archives?) de l'attribut, qui est généralement désactivé : un aller-retour sans modification masque donc les attributs sur les pages produit. Utilisez le filtre ci-dessus, ou réglez les cellules sur 1 (affiché) ou 0 (masqué) avant l'import. Laissez Attribute N global sur 1.
  • Sur les lignes de variations, les cellules d'attributs sont vides dans la 2.2.4. Comme elles sont vides, l'importateur laisse intactes les valeurs d'attributs propres aux variations : mettre à jour les prix, le stock ou les SKU de variations existantes par ID est donc sans risque. Créer de nouvelles variations à partir du fichier ne l'est pas : sans valeurs d'attributs, elles sont créées comme des variations Any .... Créez-les plutôt dans BEAR, comme dans création de variations en masse.

Si le CSV doit donc porter des modifications d'attributs, activez avant l'export la colonne de chaque attribut utilisé par vos produits, et vérifiez que chaque ligne de produit liste tous ses termes. Pour la plupart des travaux sur les attributs, l'éditeur est le chemin le plus court : ajouter des attributs aux produits en masse ajoute des termes sans toucher aux autres.

Excel, Google Sheets et tout dans une seule colonne

  • L'écran d'association affiche une seule ligne contenant tous les noms de colonnes. Le fichier utilise un autre séparateur que celui attendu par l'importateur. Excel enregistre les fichiers CSV avec des points-virgules partout où le séparateur de liste du système est un point-virgule, ce qui est le cas dans de nombreux environnements régionaux européens. Saisissez soit ; dans Séparateur CSV (CSV Delimiter) sous Afficher les options avancées (Show advanced options) sur le premier écran de l'importateur, soit enregistrez le fichier avec des virgules. Ce qui compte, c'est le fichier que vous envoyez, pas le séparateur avec lequel vous avez exporté.
  • Les lettres accentuées ou non latines sont abîmées. Dans Excel, choisissez CSV UTF-8 (délimité par des virgules) (CSV UTF-8 (Comma delimited)) à l'enregistrement ; le simple CSV (délimité par des virgules) (CSV (Comma delimited)) utilise la page de codes locale de l'ordinateur. L'option Encodage des caractères du fichier (Character encoding of the file) de l'importateur est réglée par défaut sur Détection automatique (Autodetect).
  • Les SKU, codes et prix changent. Excel supprime les zéros initiaux, transforme les longs nombres en 1.23E+12 et, dans les environnements à virgule décimale, interprète mal des prix tels que 29.90. Ouvrez l'export via Données → À partir d'un fichier texte/CSV (Data → From Text/CSV) et réglez ces colonnes sur Texte, comme décrit dans corriger les exports CSV de BEAR.
  • Google Sheets évite la plupart de ces problèmes : Fichier → Télécharger → Valeurs séparées par des virgules (File → Download → Comma-separated values) écrit toujours des virgules et de l'UTF-8.
  • Utiliser les préférences d'association de colonnes précédentes ? L'importateur mémorise votre dernière association, et cette option avancée la remplit de nouveau. L'association est enregistrée par position de colonne, non par nom : elle n'est donc juste que pour un fichier ayant les mêmes colonnes dans le même ordre. Un profil de colonnes enregistré dans BEAR vous donne exactement cela ; vérifiez malgré tout l'écran d'association avant de lancer l'import.

Liste de vérification avant d'appuyer sur Lancer l'importateur

  1. Une sauvegarde existe, et le fichier a d'abord été essayé avec un produit simple et un produit variable.
  2. Le fichier contient la colonne ID, et Mettre à jour les produits existants est coché.
  3. L'écran d'association montre des colonnes séparées avec des valeurs d'exemple, et seules les colonnes que vous avez modifiées sont associées.
  4. Aucun 0 ne figure là où le produit n'avait pas de tarif promo, de prix ou de suivi de stock, et aucun -1 dans les colonnes de prix (ou le filtre d'export est actif).
  5. Soit aucune valeur d'attribut n'est dans le fichier, soit chaque ligne de produit liste tous ses attributs et termes avec la bonne valeur de visible (visible).

Le côté WooCommerce de l'import est documenté dans le guide de l'importateur et exportateur CSV de produits WooCommerce. Si une mise à jour modifie encore quelque chose qu'elle ne devrait pas, ouvrez un sujet sur le forum de support de BEAR avec les premières lignes de votre fichier et l'association que vous avez choisie.