Actualizar productos de WooCommerce existentes con importación CSV, sin riesgos
Para actualizar productos de WooCommerce existentes con una importación CSV, expórtalos desde BEAR, cambia los valores en una hoja de cálculo y carga el archivo en el importador de productos de WooCommerce con Actualizar productos existentes (Update existing products) marcado. El recorrido de ida y vuelta funciona, pero la exportación y el importador no hablan exactamente el mismo idioma: varias columnas hay que asignarlas a mano, algunos valores vacíos se escriben como 0, y el importador escribe todas las celdas asignadas, también las vacías. Si se hace sin cuidado, una sola importación puede poner productos en oferta por cero, activar la gestión de inventario, ocultar atributos o eliminar los atributos sobre los que se construyen las variaciones. A continuación tienes el procedimiento que evita todo eso.
Cómo actualiza una importación CSV los productos de WooCommerce existentes
BEAR no tiene un motor de importación propio. El botón Importar desde CSV (Import from CSV) de la pestaña Exportar abre el importador estándar de WooCommerce (Productos → Importar (Products → Import)) en una pestaña nueva del navegador, así que una actualización sigue las reglas de WooCommerce:
- Con Actualizar productos existentes (Update existing products) marcado, cada fila se empareja con un producto o variación por su celda ID (ID), o por el SKU (SKU) cuando la celda de ID está vacía o el archivo no tiene columna de ID. Las filas que no coinciden con nada se omiten con No existe ningún producto coincidente que actualizar (No matching product exists to update).
- Sin la marca, el importador crea productos, y las filas cuyo ID o SKU ya existe se omiten con Ya existe un producto con este ID (A product with this ID already exists) (o SKU).
- Los productos que no están en el archivo no se tocan, y no se elimina nada. Un archivo con cinco filas cambia cinco productos.
- Cada columna asignada se escribe en todas las filas, y una celda vacía en una columna asignada borra el valor: un PRECIO REBAJADO (Sale price) vacío elimina la oferta. Una columna fijada en No importar (Do not import) deja el campo como está.
La última regla es la clave de una actualización segura: pon en el archivo solo lo que vas a cambiar, más ID (ID), y no asignes nada más. Haz una copia de seguridad antes de la primera ejecución. El importador no pasa por BEAR, así que la pestaña Historial (History) de BEAR no puede deshacer lo que cambió una importación.
Exporta solo las columnas que vas a cambiar
- Filtra o marca los productos en BEAR. En un producto variable, la exportación añade todas las variaciones, cada una en su propia fila con su propio ID.
- En Ajustes (Settings), activa ID (ID) y las columnas que quieras editar, por ejemplo PRECIO NORMAL (Regular price) y PRECIO REBAJADO (Sale price), y desactiva el resto. El archivo contiene exactamente las columnas activas, en el mismo orden. Guarda el conjunto en Perfiles de columnas (Columns profiles) para obtener un archivo idéntico cada vez.
- Deja desactivadas las columnas de atributos salvo que el trabajo sea cambiar atributos; la sección sobre variaciones explica por qué.
- Mantén la coma en el desplegable de delimitador, pulsa Exportar a CSV (Export to CSV) y luego descargar CSV (download CSV).
Exportación e importación del editor masivo: asignación de columnas
BEAR nombra las columnas igual que su editor. El importador reconoce sus propios nombres y algunos habituales, y muestra todo lo demás como No importar (Do not import). En un administrador en inglés estas columnas se asignan solas: ID (ID), TÍTULO (Title) (a Nombre (Name)), SKU (SKU), Tipo (Type), descripción (Description), PRECIO NORMAL (Regular price), PRECIO REBAJADO (Sale price), estado fiscal (Tax status), Clase de impuesto (Tax class), Categorías (Categories), Etiquetas (Tags), Clase de envío (Shipping class), Ventas dirigidas (Upsells), Ventas cruzadas (Cross-sells), Productos agrupados (Grouped products), Nota de compra (Purchase note), ORDEN DEL MENÚ (Menu order) (a Posición (Position)), límite de descargas (Download limit), Superior (Parent), las columnas Atributo N (Attribute N), las columnas Descarga N (Download N) y todas las columnas Meta:. En otros idiomas del administrador coinciden menos. Para el resto, elige el campo en Asignar al campo (Map to field):
| Columna de BEAR | Asignar al campo | Valores en el archivo |
|---|---|---|
| Descripción corta (Short Desc.) | Descripción corta (Short description) | Texto tal como está almacenado |
| Estado (Status) | Publicado (Published) | 1 publicado, -1 borrador, 0 privado |
| Destacado (Featured) | ¿Es destacado? (Is featured?) | 1 o 0 |
| Visibilidad en el catálogo (Catalog Visibility) | Visibilidad en el catálogo (Visibility in catalog) | visible, catalog, search, hidden |
| Inicio y fin de la oferta (Sale time from, Sale time to) | Fecha de inicio del precio rebajado, Fecha de fin del precio rebajado (Date sale price starts, Date sale price ends) | Solo la fecha, hora 0:00:00 |
| Cantidad del inventario (Stock quantity) | Inventario (Stock) | Número; consulta la sección siguiente |
| estado del inventario (Stock status) | ¿En inventario? (In stock?) | 1 en inventario, 0 cualquier otro |
| Permitir pedidos pendientes (Allow backorders) | ¿Se permiten pedidos pendientes? (Backorders allowed?) | 1, 0 o notify |
| Vendido individualmente (Sold individually) | ¿Vendido individualmente? (Sold individually?) | 1 o 0 |
| Peso, Longitud, Ancho, Alto (Weight, Length, Width, Height) | Peso, Longitud, Ancho, Alto (en las unidades de tu tienda) (Weight, Length, Width, Height) | Número |
| Valoraciones permitidas (Reviews allowed) | ¿Permitir valoraciones de clientes? (Allow customer reviews?) | 1 o 0 |
| URL del producto, texto del botón de afiliado (Product url, Aff.Button text) | URL externa, Texto del botón (External URL, Button text) | Texto |
| Caducidad de la descarga (Download expiry) | Días de caducidad de la descarga (Download expiry days) | Número, -1 para que nunca caduque |
Algunas columnas no tienen equivalente en el importador: Slug (Slug), Gestionar inventario (Manage stock), Descargable (Downloadable) y Virtual (Virtual) (la columna Tipo (Type) ya incluye estas dos como simple, downloadable, virtual), Autor (Author), Fecha de publicación (Date Published), Ventas totales (Total sales), Número de valoraciones (Review count), Valoración promedio (Average rating) y Visibilidad del atributo (Attribute visibility). Déjalas en No importar (Do not import). Lo mismo vale para Miniatura (Thumbnail) y galería (Gallery): el importador tiene una sola columna Imágenes (Images) (primero la imagen destacada, luego la galería), mientras que BEAR exporta dos, así que cambia las imágenes en el editor.
Dos cosas más en esta pantalla. La fila de encabezado de un archivo de BEAR termina con un delimitador, así que la lista acaba con una columna extra sin nombre; está vacía, déjala en No importar (Do not import). Y los campos meta que contienen listas o datos estructurados (los que BEAR edita en una ventana emergente) se exportan como texto JSON, que el importador guardaría como una cadena simple en lugar de los datos originales. No importes esas columnas; edítalas como se describe en Campos meta (Meta Fields).
Valores vacíos, ceros y -1: qué hace el importador con ellos
BEAR 2.2.4 escribe las columnas numéricas como números aunque el producto no tenga valor: un PRECIO NORMAL (Regular price), PRECIO REBAJADO (Sale price), Cantidad del inventario (Stock quantity), Peso (Weight), Longitud (Length), Ancho (Width) o Alto (Height) vacío se convierte en 0 en el archivo. El importador toma el cero al pie de la letra:
- Precio rebajado 0 pone el producto en oferta por 0, y la tienda lo vende gratis. Antes de la importación, filtra la columna PRECIO REBAJADO (Sale price) por 0 en la hoja de cálculo y elimina esos valores: una celda vacía significa que no hay precio rebajado. Haz lo mismo en PRECIO NORMAL (Regular price) con los productos que no tienen ningún precio.
- Inventario 0 activa la gestión de inventario con una cantidad de 0, de modo que un producto que no llevaba control de inventario pasa a estar agotado, y la propia fila de un producto variable activa la gestión de inventario a nivel de producto. Una celda vacía hace lo contrario: desactiva la gestión de inventario. Exporta Gestionar inventario (Manage stock) junto con Cantidad del inventario (Stock quantity), vacía la cantidad en cada fila donde Gestionar inventario (Manage stock) sea 0 y asigna Gestionar inventario (Manage stock) a No importar (Do not import).
- Peso y dimensiones 0 reemplazan los valores vacíos por 0. Vacíalos, o no importes estas columnas.
- -1 elimina un precio rebajado solo en la pestaña Edición en masa (Bulk Edit) propia de BEAR, como en eliminar precios rebajados en masa. El importador guarda
-1como un precio rebajado negativo, y el precio del producto pasa a ser -1. En un CSV, la forma de quitar una oferta es una celda vacía.
Otros valores también requieren atención. estado del inventario (Stock status) se exporta como 1 para en inventario y 0 para cualquier otro, así que los productos con pedidos pendientes vuelven como agotados; escribe backorder en sus celdas. Los productos pendientes y programados se exportan con las palabras pending y future en Estado (Status), que el importador interpreta como 0 y deja los productos privados; si tienes alguno, deja Estado (Status) en No importar (Do not import). Las fechas de oferta se exportan sin su hora, así que una oferta que empieza o termina a una hora concreta se mueve a medianoche; no importes estas columnas salvo que vayas a cambiar las fechas.
Si haces este recorrido de ida y vuelta con regularidad, deja que la exportación escriba por sí misma las celdas vacías y la visibilidad real de los atributos (explicada en la sección siguiente). Este filtro cambia solo los valores de la exportación CSV. Ponlo en el functions.php del tema hijo o en un plugin de fragmentos de código:
/**
* 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 );
Con el filtro activo, un archivo que se exporta e importa de nuevo sin cambios deja los precios, el inventario y la visibilidad de los atributos exactamente como estaban. Un inventario gestionado de 0 sigue siendo 0, porque solo se vacían los valores que faltan.
La importación CSV eliminó atributos o variaciones: cómo evitarlo
El importador gestiona los atributos fila por fila, y reemplaza la lista de atributos de un producto en lugar de añadirse a ella:
- Cuando una fila de producto tiene un valor en cualquier celda Valor(es) del atributo N (Attribute N value(s)), los atributos del producto pasan a ser exactamente los del archivo. Un atributo que no tiene columna, o una celda vacía en esa fila, se elimina del producto, incluidos los atributos sobre los que se construyen las variaciones. Las variaciones pierden entonces esos valores y se muestran en la tienda como Cualquier talla (Any Size) o Cualquier color (Any Color).
- Cuando todas las celdas de atributos de una fila están vacías, los atributos del producto no se tocan.
- Una celda de valores es la lista completa de términos de ese producto, separados por comas. Un valor que todavía no existe como término se crea, así que una errata se convierte en un término nuevo.
- BEAR exporta solo atributos globales (Productos → Atributos (Products → Attributes)). Los atributos personalizados escritos en la página del producto no pueden estar en el archivo, de modo que una importación con cualquier valor de atributo los elimina. Conviértelos antes en globales, como en convertir atributos personalizados en globales.
- Atributo N visible (Attribute N visible) es la casilla Visible en la página de productos (Visible on the product page). BEAR 2.2.4 escribe en ella el ajuste ¿Activar archivos? (Enable archives?) del atributo, que normalmente está desactivado, así que un recorrido de ida y vuelta sin cambios oculta los atributos en las páginas de producto. Usa el filtro anterior, o pon las celdas en
1(mostrado) o0(oculto) antes de la importación. Deja Atributo N global (Attribute N global) en1. - En las filas de variaciones, las celdas de atributos están vacías en la 2.2.4. Como están vacías, el importador deja en paz los valores de atributo propios de las variaciones, así que actualizar por ID los precios, el inventario o los SKU de variaciones existentes es seguro. Crear variaciones nuevas desde el archivo no lo es: sin valores de atributo se crean como variaciones Cualquier ... (Any ...). Créalas en su lugar en BEAR, como en crear variaciones en masa.
Así que, si el CSV tiene que llevar cambios de atributos, activa antes de la exportación la columna de cada atributo que usan tus productos y comprueba que cada fila de producto enumera todos sus términos. Para la mayoría de los trabajos con atributos, el editor es el camino más corto: añadir atributos a productos en masa añade términos sin tocar los demás.
Excel, Google Sheets y todo en una sola columna
- La pantalla de asignación muestra una sola fila con todos los nombres de columna. El archivo usa un delimitador distinto del que espera el importador. Excel guarda los archivos CSV con punto y coma allí donde el separador de listas del sistema es el punto y coma, que es el caso de muchas configuraciones regionales europeas. Introduce
;en Delimitador CSV (CSV Delimiter), en Mostrar opciones avanzadas (Show advanced options), en la primera pantalla del importador, o guarda el archivo con comas. Lo que cuenta es el archivo que subes, no el delimitador con el que exportaste. - Las letras acentuadas o no latinas se rompen. En Excel elige CSV UTF-8 (delimitado por comas) (CSV UTF-8 (Comma delimited)) al guardar; el CSV (delimitado por comas) (CSV (Comma delimited)) normal usa la página de códigos local del equipo. La opción Codificación de caracteres del archivo (Character encoding of the file) del importador está en Autodetectar (Autodetect) por defecto.
- Los SKU, códigos y precios cambian. Excel elimina los ceros iniciales, convierte los números largos en
1.23E+12y, en configuraciones regionales con coma decimal, interpreta mal precios como29.90. Abre la exportación mediante Datos → Desde texto/CSV (Data → From Text/CSV) y pon esas columnas como Texto, como se describe en solucionar las exportaciones CSV de BEAR. - Google Sheets evita la mayor parte de esto: Archivo → Descargar → Valores separados por comas (File → Download → Comma-separated values) siempre escribe comas y UTF-8.
- ¿Usar las preferencias de asignación de columnas anteriores? (Use previous column mapping preferences?) El importador recuerda tu última asignación, y esta opción avanzada la vuelve a rellenar. La asignación se guarda por posición de columna, no por nombre, así que solo es correcta para un archivo con las mismas columnas en el mismo orden. Un perfil de columnas guardado en BEAR te da justamente eso; revisa de todos modos la pantalla de asignación antes de ejecutar la importación.
Lista de comprobación antes de pulsar Ejecutar el importador
- Existe una copia de seguridad, y el archivo se probó antes con un producto simple y uno variable.
- El archivo tiene la columna ID (ID), y Actualizar productos existentes (Update existing products) está marcado.
- La pantalla de asignación muestra columnas separadas con valores de ejemplo, y solo están asignadas las columnas que cambiaste.
- No hay ningún
0donde el producto no tenía precio rebajado, precio o control de inventario, ni ningún-1en las columnas de precio (o el filtro de exportación está activo). - O bien no hay ningún valor de atributo en el archivo, o bien cada fila de producto enumera todos sus atributos y términos con el valor de visible (visible) correcto.
La parte de WooCommerce de la importación está documentada en la guía del importador y exportador CSV de productos de WooCommerce. Si una actualización sigue cambiando algo que no debería, abre un tema en el foro de soporte de BEAR con las primeras líneas de tu archivo y la asignación que elegiste.