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

Elementor Loop Grid自定义分类查询失效求助

问题分析与修复方案

核心问题排查

  • 钩子未正确触发:你使用的elementor/query/child_verticals_terms是Elementor Loop Widget的自定义查询钩子,必须在Loop Widget的「高级」选项中设置「自定义查询ID」为child_verticals_terms才能触发,这是最容易遗漏的环节。
  • 查询逻辑适配问题:原代码中is_tax('verticals')的判断在Elementor模板上下文可能失效,直接替换tax_query的方式未考虑查询默认参数,且post_type设为any可能扩大不必要的结果范围。

修复后的代码

function filter_elementor_loop_widget_terms( $query ) {
    // 解析查询的分类参数,替代is_tax判断以适配Elementor模板
    $tax_query = $query->get( 'tax_query' );
    $is_verticals_archive = false;
    $current_term_id = 0;
    
    if ( $tax_query ) {
        foreach ( $tax_query as $tax_clause ) {
            if ( isset( $tax_clause['taxonomy'] ) && $tax_clause['taxonomy'] === 'verticals' ) {
                $is_verticals_archive = true;
                $current_term_id = isset( $tax_clause['terms'] ) ? $tax_clause['terms'][0] : 0;
                break;
            }
        }
    }

    if ( $is_verticals_archive && $current_term_id ) {
        // 获取当前术语的子术语ID
        $child_terms = get_terms( array(
            'taxonomy'   => 'verticals',
            'child_of'   => $current_term_id,
            'hide_empty' => false,
            'fields'     => 'ids',
        ) );

        if ( ! empty( $child_terms ) && ! is_wp_error( $child_terms ) ) {
            // 替换查询规则为仅显示子术语关联的文章
            $query->set( 'tax_query', array(
                array(
                    'taxonomy' => 'verticals',
                    'field'    => 'term_id',
                    'terms'    => $child_terms,
                    'operator' => 'IN',
                ),
            ) );
        } else {
            // 无子女术语时返回空结果
            $query->set( 'post__in', array( 0 ) );
        }
    }
}
add_action( 'elementor/query/child_verticals_terms', 'filter_elementor_loop_widget_terms' );

关键修改说明

  • 适配Elementor上下文:通过解析tax_query参数判断是否为verticals分类归档,避免is_tax在Elementor编辑模板中失效。
  • 简化空结果处理:用post__in => array(0)替代复杂的tax_query规则,更可靠地返回空结果。
  • 保留原有配置:去掉不必要的post_type => any设置,避免覆盖Loop Widget原本的文章类型配置。

必做配置步骤

  1. 打开Elementor编辑器,找到页面中使用的Loop Widget。
  2. 进入「高级」标签页,在「自定义查询ID」输入框中填入child_verticals_terms。
  3. 更新并发布页面,刷新归档页验证效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:25:10