
Cómo encontrar productos de WooCommerce en la base de datos
WooCommerce guarda los productos como posts en la base de datos, pero también utiliza taxonomías personalizadas y metadatos para almacenar información específica como precios, atributos, tipo de producto y más.
Este artículo te muestra cómo consultar directamente en la base de datos para obtener productos, variaciones y sus valores relacionados de forma clara y actualizada.
Mostrar los productos
WooCommerce guarda todos los productos (simples, variables, agrupados, etc.) en la tabla wp_posts
, con post_type = 'product'
.
SELECT ID, post_title, post_status FROM wp_posts WHERE post_type = 'product' AND post_status = 'publish';
Esta consulta muestra todos los productos publicados, sin importar si son simples, variables, etc.
Consultar tipo de producto (simple, variable, etc.)
Desde versiones recientes, WooCommerce ya no guarda el tipo de producto como un metadato, sino como una taxonomía llamada product_type
.
SELECT p.ID, p.post_title, tt.term_id, t.name AS product_type FROM wp_posts p JOIN wp_term_relationships tr ON p.ID = tr.object_id JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id JOIN wp_terms t ON tt.term_id = t.term_id WHERE p.post_type = 'product' AND tt.taxonomy = 'product_type';
Esto te da el nombre del producto y su tipo (simple
, variable
, grouped
, external
).
Obtener precios, SKU y stock de los productos
Los valores como el precio, el SKU y el stock todavía se almacenan en wp_postmeta
:
SELECT p.ID AS product_id, p.post_title AS name, sku.meta_value AS sku, price.meta_value AS regular_price, sale.meta_value AS sale_price, stock.meta_value AS stock FROM wp_posts p LEFT JOIN wp_postmeta sku ON p.ID = sku.post_id AND sku.meta_key = '_sku' LEFT JOIN wp_postmeta price ON p.ID = price.post_id AND price.meta_key = '_regular_price' LEFT JOIN wp_postmeta sale ON p.ID = sale.post_id AND sale.meta_key = '_sale_price' LEFT JOIN wp_postmeta stock ON p.ID = stock.post_id AND stock.meta_key = '_stock' WHERE p.post_type = 'product' AND p.post_status = 'publish';
Ver atributos del producto
Los atributos asignados al producto padre se almacenan en la meta clave _product_attributes
, como un array serializado:
SELECT post_id, meta_value FROM wp_postmeta WHERE meta_key = '_product_attributes' AND post_id = 123; -- Cambiar por el ID del producto
Para visualizar correctamente el contenido, puedes usar herramientas de deserialización de PHP o cargarlo en un script de WordPress para interpretarlo como array.
Consultar variaciones de un producto variable
Las variaciones se almacenan como post_type = 'product_variation'
, con post_parent = ID del producto padre
.
SELECT v.ID AS variation_id, v.post_title AS variation_name, sku.meta_value AS sku, price.meta_value AS regular_price, sale.meta_value AS sale_price FROM wp_posts v LEFT JOIN wp_postmeta sku ON v.ID = sku.post_id AND sku.meta_key = '_sku' LEFT JOIN wp_postmeta price ON v.ID = price.post_id AND price.meta_key = '_regular_price' LEFT JOIN wp_postmeta sale ON v.ID = sale.post_id AND sale.meta_key = '_sale_price' WHERE v.post_type = 'product_variation' AND v.post_parent = 123; -- Cambiar por el ID del producto variable
Obtener atributos asignados a cada variación
SELECT meta_key, meta_value FROM wp_postmeta WHERE post_id = 456 -- ID de la variación AND meta_key LIKE 'attribute_%';
Aquí se almacenan los atributos seleccionados como attribute_pa_color
, attribute_pa_size
, etc.
Consultar productos en WooCommerce directamente desde la base de datos es útil para auditar datos, generar reportes personalizados o integrarte con sistemas externos. Recuerda:
- El tipo de producto ahora está en la taxonomía
product_type
, no enpostmeta
. - Los atributos están en
_product_attributes
(producto padre) y comoattribute_*
en cada variación. - Las variaciones son posts hijos con
post_type = 'product_variation'
.