如何为Query Loop Block设置多个自定义字段筛选条件?
多自定义字段筛选Query Loop Block的解决方案
问题描述
我按照某教程完成了Query Loop Block的单个自定义字段筛选,前端功能正常,当前使用的代码如下。我的问题是:如何实现多自定义字段筛选?例如,仅展示colours_ornamental为true且另一个自定义键值也为true的文章。我之前编写过查询语句,但这是首次使用Query Loop Block,尝试结合已有知识但遇到了瓶颈,恳请帮忙。
当前代码:
add_filter( 'pre_render_block', 'chilli_collection_pre_render_block', 10, 2 ); function chilli_collection_pre_render_block( $pre_render, $parsed_block ) { if ( !empty($parsed_block['attrs']['namespace']) && 'chilli-collection' === $parsed_block['attrs']['namespace'] ) { add_filter( 'query_loop_block_query_vars', function( $query, $block ) { $query['meta_key'] = 'colours_ornamental'; $query['meta_value'] = '1'; $query['meta_compare'] = '='; $query['posts_per_page'] = '-1'; $query['orderby'] = 'title'; $query['order'] = 'ASC'; return $query; }, 10, 2 ); } return $pre_render; }
解决方案
要实现多自定义字段的“且”(AND)筛选,需要使用WordPress查询的meta_query参数,而非单个的meta_key/meta_value/meta_compare。具体修改如下:
- 移除原来的单个自定义字段筛选参数
- 添加
meta_query数组,设置条件关系为AND,并在数组中定义多个筛选规则
修改后的完整代码:
add_filter( 'pre_render_block', 'chilli_collection_pre_render_block', 10, 2 ); function chilli_collection_pre_render_block( $pre_render, $parsed_block ) { if ( !empty($parsed_block['attrs']['namespace']) && 'chilli-collection' === $parsed_block['attrs']['namespace'] ) { add_filter( 'query_loop_block_query_vars', function( $query, $block ) { // 多自定义字段筛选规则 $query['meta_query'] = array( 'relation' => 'AND', // 所有条件必须同时满足 array( 'key' => 'colours_ornamental', 'value' => '1', 'compare' => '=' ), array( 'key' => 'another_custom_field', // 替换为你的第二个自定义字段键名 'value' => '1', 'compare' => '=' ) ); // 保留原有排序、分页配置 $query['posts_per_page'] = '-1'; $query['orderby'] = 'title'; $query['order'] = 'ASC'; return $query; }, 10, 2 ); } return $pre_render; }
额外说明
- 如果需要实现“或”(OR)关系的筛选,只需将
relation的值改为OR即可 - 可以在
meta_query数组中添加更多条件,每个条件对应一个自定义字段的筛选规则 compare参数支持多种比较方式,比如!=、>、<等,可根据需求调整
内容的提问来源于stack exchange,提问作者Noëlle Steegs
相关产品推荐
相关产品推荐

