You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:58:34