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

如何为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。具体修改如下:

  1. 移除原来的单个自定义字段筛选参数
  2. 添加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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:35:23