La exportación CSV de productos de WooCommerce no funciona: soluciones para BEAR
Cuando la exportación CSV de productos de WooCommerce no funciona en BEAR, el síntoma indica dónde buscar: los botones de exportación no hacen nada, la barra de progreso nunca avanza, el archivo descargado está vacío o desactualizado, el archivo contiene más productos de los que mostraba el filtro, o Excel lo abre con letras rotas. Cada uno de estos casos tiene su propia causa, y exportar de nuevo no soluciona ninguno. A continuación verás cómo se ejecuta una exportación y la solución para cada síntoma.
Cómo se ejecuta una exportación de BEAR
La pestaña Exportar funciona mediante una serie de peticiones a admin-ajax.php:
- Inicio. El servidor elimina los archivos de exportaciones anteriores, crea un archivo nuevo con la fila de encabezado en
wp-content/plugins/woo-bulk-editor/ext/export/__exported_files/y, cuando no hay productos marcados, devuelve los ID de los productos que coinciden con el filtro actual. - Filas. El navegador envía los productos en lotes de diez. El servidor añade sus filas y suma las variaciones de los productos variables. La barra de progreso cuenta estos lotes.
- Descarga. Tras el último lote aparece el botón descargar CSV (download CSV) (o descargar XML (download XML)). No enlaza al archivo: se lo pide al servidor, que comprueba tu permiso y envía el archivo. La propia carpeta está cerrada a la web.
Cada exportación tiene su propio nombre de archivo: woobe_exported_, la fecha y la hora, y una terminación de aspecto aleatorio. Las columnas son las activas en la pestaña Ajustes (Settings) para tu usuario, en el mismo orden. El aviso en la parte superior de la pestaña, La exportación se aplicará a (Export will be applied to), indica los productos que contendrá el archivo.
Los botones de exportación no hacen nada
Si al hacer clic en Exportar a CSV (Export to CSV) no ocurre nada, o los botones se ocultan y todo se detiene, un error de JavaScript lo ha interrumpido. Pulsa F12, abre la pestaña Consola, haz clic de nuevo en el botón y lee la línea roja.
lang.export is undefined (Firefox) o Cannot read properties of undefined (reading 'export_is_going') (Chrome) tiene una causa concreta. BEAR guarda los textos de su interfaz en un objeto JavaScript global llamado lang, y la pestaña Exportar le añade los suyos. Un tema u otro plugin que declare su propio lang global más tarde en la misma página reemplaza el objeto de BEAR, y los textos de exportación desaparecen con él. Para confirmarlo, escribe typeof lang.export en la consola: debe responder "object". Después busca el script que lo sobrescribe: desactiva plugins uno a uno en una copia de pruebas, o mantén al culpable lejos del editor de forma permanente como se describe en aislar plugins durante las ediciones masivas. No edites el export.js de BEAR para quitar los textos: la siguiente actualización restaura el archivo.
Otros errores rojos de otro plugin o tema también pueden detener los scripts del editor. Si todo el editor falla, empieza por el editor masivo que no carga.
La exportación no termina, falla con error 500 o descarga un archivo vacío
Cuando PHP no puede escribir en la carpeta de exportación, la versión actual se detiene sin mensaje de error, y lo que ves depende de cómo exportaste:
- Con un filtro o con todo el catálogo: la barra de progreso queda vacía, solo se ve cancelar exportación (cancel export) y el mensaje Exportando ... (Exporting ...) no desaparece nunca.
- Con productos marcados: la pestaña dice Exportado (Exported) y muestra el botón de descarga, pero el archivo descargado está vacío, a menudo guardado como
admin-ajax.htm.
La primera situación también aparece cuando el filtro no coincide con ningún producto, así que comprueba primero el recuento bajo la tabla. Las versiones antiguas se detenían con un HTTP 500 y esta línea en el registro de errores de PHP: fputs(): Argument #1 ($stream) must be of type resource, bool given en ext/export/export.php. La causa es la misma: no se pudo abrir el archivo para escritura. Actualiza BEAR y después corrige la carpeta.
Ocurre sobre todo tras un traslado a otro hosting o la restauración de una copia de seguridad, cuando los archivos pertenecen a un usuario del sistema distinto de aquel con el que se ejecuta PHP. Otras causas: un hosting gestionado que mantiene la carpeta de plugins en solo lectura en el sitio en producción, una cuota de disco llena, una restricción open_basedir. Para solucionarlo:
- Abre
wp-content/plugins/woo-bulk-editor/ext/export/en el administrador de archivos del hosting o por FTP. BEAR crea__exported_filespor sí mismo cuando falta, si tiene permiso para hacerlo. - Asegúrate de que la carpeta pertenece al usuario con el que se ejecuta PHP y tiene permisos
755(archivos644). Si no puedes cambiar el propietario, pide al hosting que permita a PHP escribir allí. - Comprueba la cuota de disco de la cuenta de hosting.
- Si la carpeta tiene permiso de escritura y la exportación sigue fallando, activa el registro de depuración en
wp-config.phpy leewp-content/debug.logtras el siguiente intento:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Pon estas líneas encima de Eso es todo, ¡deja de editar! (That's all, stop editing) y quítalas cuando termines. La guía de depuración de WordPress las explica.
La descarga está vacía, desactualizada o con columnas incorrectas
- El archivo ya no existe. Los archivos de exportación se eliminan 8 horas después de escribirse (desde la versión 2.2.3), y cada nueva exportación borra los anteriores. La carpeta es compartida, así que la exportación de un compañero elimina también la tuya. Descarga justo después de que termine la exportación y ejecuta las exportaciones de una en una.
- La página es demasiado antigua. El enlace de descarga lleva un token de seguridad de WordPress creado cuando se cargó la página del editor. Estos tokens son válidos entre 12 y 24 horas; después el servidor no envía nada y el navegador guarda un archivo vacío. Recarga el editor y exporta de nuevo.
- Siempre el mismo archivo antiguo. Las versiones antiguas descargaban el archivo directamente de la carpeta del plugin, donde la caché de un servidor o de una CDN podía servir una copia anterior. Desde la 2.2.3 cada exportación tiene un nombre nuevo y llega a través de
admin-ajax.phpcon cabeceras de no caché. Si sigues recibiendo un archivo antiguo, actualiza BEAR y asegúrate de que ninguna regla de caché cubra/wp-admin/ni/wp-admin/admin-ajax.php. - Columnas incorrectas o ausentes. El archivo tiene exactamente las columnas activas en Ajustes para el usuario con sesión iniciada, sea lo que sea lo que muestren las pestañas Edición masiva o Filtros. Activa las columnas, guarda, recarga el editor y exporta de nuevo. Guarda el conjunto como un perfil de columnas si lo necesitas a menudo.
Algunas columnas difieren del editor a propósito, porque el archivo sigue el formato del importador de productos de WooCommerce: cada atributo se convierte en cuatro columnas (Attribute 1 value(s), Attribute 1 name, Attribute 1 visible, Attribute 1 global), un campo meta se convierte en Meta: más su clave, y se añade una columna Superior (Parent) siempre que hay una columna de atributo activa. El importador reconoce las columnas por su nombre, así que su orden no importa al importar.
Más productos o más variaciones de los que mostraba el filtro
La exportación sigue una prioridad fija: primero los productos marcados, luego el filtro actual y después todos los productos. Si marcaste filas antes y lo olvidaste, el aviso dice los productos (variaciones) seleccionados (the selected products (variations)); quítalas con el botón de desmarcar del panel de herramientas. Si el aviso dice los productos filtrados (the filtered products) pero el archivo contiene todo el catálogo, el filtro se perdió en el servidor entre peticiones. En ese caso el recuento bajo la tabla salta, y la solución está en el filtro del editor masivo que no funciona.
Con las variaciones es distinto. El filtro selecciona productos; la exportación añade después todas las variaciones de cada producto variable coincidente. Una condición como un inventario de 1 o más no elimina las variaciones que no lo tienen. Para acotar las filas de variaciones:
- Activa variaciones (variations) en el panel de herramientas. La pestaña Exportar muestra entonces un selector de combinaciones de atributos: elige los atributos, pulsa Añadir combinación de atributos (Add attributes combination), elige los valores y fija Incluido (In) o No incluido (Not in). Una combinación debe nombrar todos los atributos de la variación exactamente.
- O marca solo las filas de variaciones que quieres (seleccionar todas las variaciones (select all variations) ayuda) y exporta la selección.
- O deja fuera las variaciones que no se pueden vender del inventario con 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' );
Con él, la exportación omite las variaciones cuyo estado de inventario no es En inventario (In stock) (incluidas las que están en reserva) y las variaciones que gestionan inventario con una cantidad de 0 o menos. Los productos simples y las filas de los padres no se ven afectados. Para otros cambios en los valores exportados existe el filtro woobe_export_product_fields_answer, que figura en Más ajustes (implícitos).
En la versión 2.2.4 las columnas de atributos de las filas de variaciones se escriben vacías; los valores aparecen solo en la fila del padre. Añade la columna TÍTULO (Title) para distinguir las variaciones (consulta títulos de variaciones con atributos si las tuyas no los muestran) y edita las variaciones en el editor en lugar de reconstruirlas a partir de este archivo con el importador de WooCommerce.
Excel muestra letras rotas, precios incorrectos o códigos como &
El archivo se escribe en UTF-8 sin marca de orden de bytes. Excel abre un archivo así con un doble clic usando la página de códigos regional del equipo, de modo que las letras griegas, cirílicas y acentuadas se convierten en galimatías, aunque el archivo sea correcto: Google Sheets y LibreOffice Calc lo muestran bien. En Excel usa Datos → Desde texto/CSV (Data → From Text/CSV), fija Origen del archivo (File origin) en 65001: Unicode (UTF-8) y elige el delimitador con el que exportaste.
- Delimitador. El desplegable junto a los botones de exportación ofrece
,;|^y~. Un archivo para el importador de WooCommerce debe usar una coma; el punto y coma resulta más práctico solo para verlo en Excel cuando el separador de listas es el punto y coma. - Precios. Los precios se exportan como números almacenados con punto, como
29.90. La coma que ves en la tienda es el formato de visualización de la moneda. En una configuración regional con coma decimal, pulsa Transformar datos (Transform Data) en el cuadro de diálogo de importación y ajusta las columnas de precios con Cambiar tipo → Usar configuración regional (Change Type → Using Locale) a Inglés (Estados Unidos). - SKU y códigos. Excel elimina los ceros iniciales y convierte los números largos en
1.23E+12; pon esas columnas como Texto en el mismo cuadro de diálogo. Un SKU que contenga un carácter parecido a un guion distinto del guion simple, normalmente pegado desde un documento, conserva ese carácter en el archivo; reemplázalo por un guion en la tienda. - Entidades. Los valores de los atributos pasan por el formato de visualización de WordPress, así que
&aparece como&y un apóstrofo puede aparecer como’. Los títulos y otros textos se escriben tal como están almacenados. Reemplaza las entidades con Buscar y reemplazar antes de reutilizar el archivo. - Valores codificados. Estado (Status) es
1para publicado,-1para borrador y0para privado; estado del inventario (Stock status) es1para en inventario y0para cualquier otro; las ventas dirigidas y las ventas cruzadas se indican por SKU, o comoid:123para los productos que no tienen uno.
Lista de comprobación
- BEAR está actualizado, y
typeof lang.exportresponde"object"en la consola de la página del editor. - PHP puede escribir en
ext/export/__exported_files, dentro de la carpeta de BEAR. - El aviso La exportación se aplicará a (Export will be applied to) indica los productos que esperas, y el recuento bajo la tabla no salta.
- El archivo se descarga justo después de la exportación, desde una página del editor cargada el mismo día.
- Excel lo abre mediante Desde texto/CSV (From Text/CSV) con UTF-8.
Si la exportación sigue fallando, abre un tema en el foro de soporte de BEAR con la versión de BEAR, lo que muestra la pestaña tras el clic y cualquier error de la consola o líneas de debug.log.