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
相关产品推荐
相关产品推荐

