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.

