如何通过MySQL查询获取仅父产品已发布的WordPress简单/可变产品?
解决WordPress查询已发布产品时包含父产品未发布的可变产品问题
原查询的问题在于只校验了当前产品(包括可变产品)的发布状态,完全没管可变产品对应的父产品状态——哪怕父产品是待审(pending)或草稿状态,只要可变产品自身标为发布,就会被拉进结果里。
要过滤掉这类父产品未发布的可变产品,我们需要通过自连接关联父产品表,额外校验父产品的状态:
SELECT p.ID, p.post_title, p.post_excerpt, p.post_parent FROM wp_posts p LEFT JOIN wp_posts parent_p ON p.post_parent = parent_p.ID WHERE p.post_type IN ('product', 'product_variation') AND p.post_status = 'publish' -- 核心过滤条件:简单产品直接保留;可变产品必须对应已发布的父产品 AND ( p.post_type = 'product' OR (p.post_type = 'product_variation' AND parent_p.post_status = 'publish') ) GROUP BY p.ID
逻辑说明:
- 通过
LEFT JOIN把可变产品和它的父产品关联起来,拿到父产品的状态信息 - 新增的条件分支:
- 对于简单产品(product):只要自身是发布状态就保留
- 对于可变产品(product_variation):除了自身是发布状态,还要求父产品的
post_status必须是publish,这样就排除了父产品处于待审、草稿等非发布状态的可变产品
注意:如果你的WordPress数据库表前缀不是wp_,记得把SQL里的wp_posts替换成实际的表前缀。
内容的提问来源于stack exchange,提问作者Mahdyar
相关产品推荐
相关产品推荐

