如何通过WP_Query基于元字段数组值排除指定状态的事件?
解决WP_Query排除ACF单选按钮特定Label事件的问题
问题原因
你当前的查询无效,是因为event_status字段在数据库中存储的是单选按钮的value值(即0、1、2、3),而非你看到的label文本(Provisional等)。ACF的get_field()方法只是将数据库中的value映射为包含value和label的数组返回,但底层存储的仍是value,直接用Provisional对比无法匹配到存储的数据。
推荐解决方案(高效准确)
利用单选按钮value与label的唯一对应关系,直接排除value为0(对应Provisional)的记录,这是性能最优的方式:
$events = new WP_Query( array( 'posts_per_page' => 3, 'post_type' => 'event', 'meta_key' => 'event_date', 'orderby' => 'meta_value_num', 'order' => 'ASC', 'meta_query' => array( 'relation' => 'AND', 'date_clause' => array( 'key' => 'event_date', 'compare' => '>=', 'value' => $today->format('Ymd'), 'type' => 'DATE', ), 'status_clause' => array( 'key' => 'event_status', 'compare' => '!=', 'value' => '0' // 对应Provisional的value值 ) ) ));
补充说明
如果你确实需要通过label文本筛选(不推荐,会降低查询性能),由于label并未存储在数据库中,只能在查询后循环过滤,或通过SQL过滤器间接实现,但本质仍是依赖value映射关系,没有必要舍近求远。
内容的提问来源于stack exchange,提问作者PeterB
相关产品推荐
相关产品推荐

