Principales formas de importar productos masivamente en WooCommerce:
- Usando el Importador Nativo de WooCommerce:
- Ve a Productos > Importar
- Sube un archivo CSV con el formato correcto
- Mapea las columnas según corresponda
- Ejecuta la importación
- Usando el Script Personalizado (código proporcionado abajo):
- Ofrece más control y validación
- Maneja errores de forma más robusta
- Permite personalizar el proceso según tus necesidades
- Incluye validación de formato y manejo de categorías
<?php
// Agregar menú en el panel de administración
add_action('admin_menu', 'agregar_menu_importacion');
function agregar_menu_importacion() {
add_menu_page(
'Importar Productos',
'Importar Productos',
'manage_options',
'importador-productos',
'mostrar_pagina_importacion',
'dashicons-upload',
56
);
}
// Crear la página de importación
function mostrar_pagina_importacion() {
// Verificar permisos
if (!current_user_can('manage_options')) {
wp_die('No tienes permisos para acceder a esta página.');
}
// Procesar el formulario si se ha enviado
if (isset($_POST['submit']) && isset($_FILES['archivo_csv'])) {
if (!wp_verify_nonce($_POST['importacion_nonce'], 'importacion_productos')) {
wp_die('Error de seguridad');
}
$archivo = $_FILES['archivo_csv'];
$upload_dir = wp_upload_dir();
$archivo_temporal = $upload_dir['path'] . '/' . basename($archivo['name']);
if (move_uploaded_file($archivo['tmp_name'], $archivo_temporal)) {
$resultados = importar_productos_woocommerce($archivo_temporal);
unlink($archivo_temporal); // Eliminar archivo temporal después de la importación
}
}
?>
<div class="wrap">
<h1>Importador de Productos para WooCommerce</h1>
<div class="notice notice-info">
<p>El archivo CSV debe contener las siguientes columnas: nombre, precio, sku, descripcion, stock, categorias</p>
<p>Las categorías deben estar separadas por el símbolo | (pipe)</p>
</div>
<form method="post" enctype="multipart/form-data">
<?php wp_nonce_field('importacion_productos', 'importacion_nonce'); ?>
<table class="form-table">
<tr>
<th scope="row"><label for="archivo_csv">Seleccionar archivo CSV</label></th>
<td>
<input type="file" name="archivo_csv" id="archivo_csv" accept=".csv" required>
</td>
</tr>
</table>
<?php submit_button('Importar Productos'); ?>
</form>
<?php
// Mostrar resultados si existen
if (isset($resultados)) {
if (is_wp_error($resultados)) {
echo '<div class="notice notice-error"><p>' . esc_html($resultados->get_error_message()) . '</p></div>';
} else {
echo '<div class="notice notice-success"><p>';
echo 'Importación completada:<br>';
echo 'Productos importados: ' . esc_html($resultados['exito']) . '<br>';
echo 'Errores: ' . esc_html($resultados['errores']) . '<br>';
if (!empty($resultados['mensajes'])) {
echo 'Mensajes de error:<br>';
foreach ($resultados['mensajes'] as $mensaje) {
echo '- ' . esc_html($mensaje) . '<br>';
}
}
echo '</p></div>';
}
}
?>
</div>
<?php
}
// Función para validar el formato del CSV
function validar_formato_csv($archivo) {
$required_headers = array('nombre', 'precio', 'sku', 'descripcion', 'stock', 'categorias');
$handle = fopen($archivo, 'r');
$headers = fgetcsv($handle);
fclose($handle);
$missing_headers = array_diff($required_headers, array_map('strtolower', $headers));
if (!empty($missing_headers)) {
return new WP_Error(
'formato_invalido',
'Faltan las siguientes columnas requeridas: ' . implode(', ', $missing_headers)
);
}
return true;
}
// Función principal de importación
function importar_productos_woocommerce($archivo_csv) {
// Verificar que WooCommerce está activo
if (!class_exists('WC_Product')) {
return new WP_Error('error', 'WooCommerce debe estar instalado y activado');
}
// Validar formato
$validacion = validar_formato_csv($archivo_csv);
if (is_wp_error($validacion)) {
return $validacion;
}
// Abrir archivo CSV
$handle = fopen($archivo_csv, 'r');
if (!$handle) {
return new WP_Error('error', 'No se pudo abrir el archivo CSV');
}
// Leer encabezados
$headers = fgetcsv($handle);
// Array para almacenar resultados
$resultados = array(
'exito' => 0,
'errores' => 0,
'mensajes' => array()
);
// Procesar cada línea
while (($data = fgetcsv($handle)) !== FALSE) {
try {
$producto = array_combine($headers, $data);
// Crear nuevo producto
$new_product = new WC_Product_Simple();
// Configurar datos básicos
$new_product->set_name(sanitize_text_field($producto['nombre']));
$new_product->set_regular_price(floatval($producto['precio']));
$new_product->set_sku(sanitize_text_field($producto['sku']));
$new_product->set_description(wp_kses_post($producto['descripcion']));
$new_product->set_stock_quantity(intval($producto['stock']));
$new_product->set_manage_stock(true);
// Categorías si existen
if (!empty($producto['categorias'])) {
$categorias = explode('|', $producto['categorias']);
$cat_ids = array();
foreach ($categorias as $categoria) {
$term = term_exists(trim($categoria), 'product_cat');
if (!$term) {
$term = wp_insert_term(trim($categoria), 'product_cat');
}
if (!is_wp_error($term)) {
$cat_ids[] = is_array($term) ? $term['term_id'] : $term;
}
}
if (!empty($cat_ids)) {
$new_product->set_category_ids($cat_ids);
}
}
// Guardar producto
$new_product->save();
$resultados['exito']++;
} catch (Exception $e) {
$resultados['errores']++;
$resultados['mensajes'][] = "Error en línea " . ($resultados['exito'] + $resultados['errores']) . ": " . $e->getMessage();
}
}
fclose($handle);
return $resultados;
}
Este código modificado está listo para usar en Code Snippets. Las principales mejoras incluyen:
- Interfaz de administración:
- Agrega un nuevo menú en el panel de WordPress
- Incluye un formulario para subir archivos CSV
- Muestra mensajes de éxito y error
- Seguridad mejorada:
- Verificación de permisos
- Nonces de WordPress
- Sanitización de datos
- Manejo seguro de archivos
- Funcionalidad:
- Validación de archivos CSV
- Manejo de errores mejorado
- Limpieza automática de archivos temporales
Para usar este código:
- Ve a Code Snippets > Añadir nuevo
- Pega el código completo
- Activa el snippet
- Verás un nuevo menú "Importar Productos" en el panel de WordPress
El formato del CSV debe tener estas columnas:
- nombre
- precio
- sku
- descripcion
- stock
- categorias (separadas por |)
- Usando Plugins de Terceros:
- Product Import Export for WooCommerce
- WP All Import
- WooCommerce CSV Import Suite
Recomendaciones para una importación eficiente:
- Preparación del CSV:
- Asegúrate de que todas las columnas requeridas estén presentes
- Usa el formato correcto para cada campo
- Verifica la codificación del archivo (preferiblemente UTF-8)
- Optimización:
- Importa en lotes pequeños (500-1000 productos)
- Realiza la importación en horas de bajo tráfico
- Desactiva temporalmente plugins innecesarios
- Aumenta los límites de memoria si es necesario
- Validación:
- Siempre haz una copia de seguridad antes de importar
- Prueba primero con un archivo pequeño
- Verifica los productos después de la importación