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

WordPress WP_Query同meta_key匹配no或null值查询失效如何解决

WordPress meta查询无法匹配无对应meta键内容的解决方法

原有代码失效原因

  • WordPress原生WP_Query的meta查询默认仅返回存在目标meta键的条目,你之前写的两种查询方式,都会自动过滤掉完全未设置_wc_pre_orders_enabled字段的内容,也就是你需要匹配的null场景(这里的null本质是meta键不存在,不是字段值为null)
  • 你尝试的IN匹配array('no','')写法,只能覆盖「存在该meta键,且值为no或空字符串」的内容,无法命中根本没有写入这个meta键的条目。而WooCommerce中未开启预购的商品,绝大多数情况是直接不存储_wc_pre_orders_enabled这个meta字段,而非存no或空值,这就是规则不生效的核心原因。

正确查询代码

需要用OR关系的meta_query,同时匹配「字段值为no」和「字段不存在」两种场景:

$args = array(
    'orderby' => 'rand',
    'order' => '',
    'meta_query' => array(
        'relation' => 'OR',
        // 匹配存在该字段且值为no的内容
        array(
            'key' => '_wc_pre_orders_enabled',
            'value' => 'no',
            'compare' => '='
        ),
        // 匹配完全不存在该字段的内容
        array(
            'key' => '_wc_pre_orders_enabled',
            'compare' => 'NOT EXISTS'
        )
    )
);

补充说明

  • 如果你的站点存在部分商品_wc_pre_orders_enabled字段值为空字符串的情况,可以在meta_query的OR组里再加一个匹配空值的条件:
array(
    'key' => '_wc_pre_orders_enabled',
    'value' => '',
    'compare' => '='
)
  • 当orderby设置为rand随机排序时,order参数传空、ASC或者DESC都不会影响随机排序的效果。

内容的提问来源于stack exchange,提问作者Club

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:09:30