如何通过SQL获取WooCommerce产品?排查查询无结果问题
正确通过SQL获取WooCommerce产品的方法
你的查询没返回结果主要有几个问题,下面是修正方案和问题说明:
问题点分析
- 价格元键错误:WooCommerce中产品价格的元数据键是
_price(下划线开头),你写的price匹配不到任何数据。 - LEFT JOIN被强制转为INNER JOIN:WHERE子句里的
tt.taxonomy = 'product_type'会过滤掉所有未关联产品类型的产品,同时如果传入的%s产品类型名称不存在或无对应产品,也会返回空。 - 冗余JOIN条件:
wp_terms的关联条件里tt.term_id = t.term_id重复,可直接删除。
修正后的查询(筛选特定产品类型)
如果需要筛选指定类型的产品(比如简单产品simple),可以用以下查询:
$query = "SELECT p.id, p.post_title as title, pm.meta_value as price FROM wp_posts p INNER JOIN wp_term_relationships tr ON p.ID = tr.object_id INNER JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.taxonomy = 'product_type' INNER JOIN wp_terms t ON tt.term_id = t.term_id AND t.name = %s LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_price' WHERE p.post_type = 'product' AND p.post_status = 'publish' GROUP BY p.id";
获取所有已发布产品的查询
如果不需要筛选产品类型,直接获取所有已发布产品:
$query = "SELECT p.id, p.post_title as title, pm.meta_value as price FROM wp_posts p LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_price' WHERE p.post_type = 'product' AND p.post_status = 'publish' GROUP BY p.id";
可变产品的价格查询
如果需要包含可变产品(variable类型)的价格,因为可变产品的主产品_price字段为空,需要关联其下的变体产品:
$query = "SELECT p.id, p.post_title as title, COALESCE(pm.meta_value, pv.meta_value) as price FROM wp_posts p LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id AND pm.meta_key = '_price' LEFT JOIN wp_posts pv_post ON p.ID = pv_post.post_parent AND pv_post.post_type = 'product_variation' AND pv_post.post_status = 'publish' LEFT JOIN wp_postmeta pv ON pv_post.ID = pv.post_id AND pv.meta_key = '_price' WHERE p.post_type = 'product' AND p.post_status = 'publish' GROUP BY p.id";
内容的提问来源于stack exchange,提问作者Prains
相关产品推荐
相关产品推荐

