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

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

TablaUso
wp_postsContiene los productos (post_type = ‘product’)
wp_postmetaContiene 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.

Ir al contenido