Introducción
En WooCommerce, es común encontrarse con productos que aparecen en la tienda aunque no tengan stock. Esto puede generar una mala experiencia de usuario si el cliente accede a un producto y no puede comprarlo.
Este artículo te muestra cómo detectar productos sin stock que aún están visibles en la tienda mediante consultas SQL, explicando paso a paso cómo funciona el sistema de inventario en WooCommerce.
Índice
- 1. Cómo funciona el stock en WooCommerce
- 2. Tablas involucradas
- 3. Consulta SQL para encontrar productos sin stock visibles
- 4. Opciones para ocultar productos automáticamente
- 5. Exportar resultados para revisión
- 6. Buenas prácticas para la gestión de stock
- 7. Conclusión
1. Cómo funciona el stock en WooCommerce
WooCommerce utiliza el campo _stock
y el campo _stock_status
dentro de la tabla wp_postmeta
para controlar si un producto está en inventario.
Además, también puede depender del ajuste de «gestionar inventario» activado o no. Si un producto tiene stock = 0 pero _stock_status
= ‘instock’, seguirá apareciendo en la tienda.
2. Tablas involucradas
Tabla | Uso |
---|---|
wp_posts | Contiene los productos (post_type = ‘product’) |
wp_postmeta | Contiene el stock y estado de stock de cada producto |
3. Consulta SQL para productos sin stock pero visibles
Esta consulta detecta productos cuyo stock es 0 pero están marcados como «instock»:
SELECT p.ID, p.post_title, pm_stock.meta_value AS stock, pm_status.meta_value AS stock_status FROM wp_posts p JOIN wp_postmeta pm_stock ON p.ID = pm_stock.post_id AND pm_stock.meta_key = '_stock' JOIN wp_postmeta pm_status ON p.ID = pm_status.post_id AND pm_status.meta_key = '_stock_status' WHERE p.post_type = 'product' AND p.post_status = 'publish' AND CAST(pm_stock.meta_value AS SIGNED) = 0 AND pm_status.meta_value = 'instock';
Explicación:
– Se cruzan los productos publicados con su valor de stock
– Se verifica si el stock es 0
– Y que el estado sea aún «instock»
4. Opciones para ocultar productos automáticamente
WooCommerce tiene una opción para ocultar productos sin stock:
- Ve a WooCommerce → Ajustes → Productos → Inventario
- Marca la casilla «Ocultar artículos sin inventario del catálogo»
Sin embargo, si eso no está activo o si tienes productos personalizados, es mejor detectarlos con SQL.
5. Exportar resultados a CSV
Ejemplo de script PHP para exportar la consulta anterior:
<?php require('wp-load.php'); global $wpdb; $results = $wpdb->get_results(" SELECT p.ID, p.post_title, pm_stock.meta_value AS stock, pm_status.meta_value AS stock_status FROM wp_posts p JOIN wp_postmeta pm_stock ON p.ID = pm_stock.post_id AND pm_stock.meta_key = '_stock' JOIN wp_postmeta pm_status ON p.ID = pm_status.post_id AND pm_status.meta_key = '_stock_status' WHERE p.post_type = 'product' AND p.post_status = 'publish' AND CAST(pm_stock.meta_value AS SIGNED) = 0 AND pm_status.meta_value = 'instock'", ARRAY_A); header('Content-Type: text/csv'); header('Content-Disposition: attachment;filename=productos_sin_stock_visibles.csv'); $output = fopen('php://output', 'w'); fputcsv($output, ['ID', 'Título', 'Stock', 'Estado']); foreach ($results as $row) { fputcsv($output, $row); } fclose($output); exit; ?>
6. Buenas prácticas para el stock
- Activa la opción de ocultar productos sin inventario
- Usa productos variables con stock independiente por variación
- Limpia productos sin ventas y sin stock regularmente
- Valida que el stock se actualice desde fuentes fiables (ERP, CSV, APIs)
7. Conclusión
Detectar productos sin stock pero que siguen visibles puede mejorar la experiencia de usuario y evitar errores de compra.
Con una simple consulta SQL puedes identificar estos casos rápidamente y tomar decisiones informadas.
¿Quieres que lo revisemos en tu tienda? 📩 Escríbenos y te ayudamos a automatizarlo.