如何获取Elementor循环网格中分类迭代项的Term ID?
解决Elementor嵌套循环网格中获取当前分类Term ID并过滤文章的问题
核心方案
通过Elementor内置的循环上下文API,精准获取嵌套循环中当前分类项的Term ID,再通过服务器端过滤器修改文章循环的查询参数,实现仅展示对应分类下的文章。
步骤1:标记目标文章循环
编辑子分类项内的文章循环网格,在「高级」选项卡的「CSS类」中添加自定义标识,比如 child-term-posts-loop。这个标识用于后续过滤器中识别目标循环,避免影响其他循环组件。
步骤2:编写服务器端过滤函数
添加以下代码到主题的functions.php文件或自定义插件中:
function filter_child_term_posts( $args, $query ) { // 仅处理标记了自定义类的文章循环 $css_classes = $query->get_settings( 'css_classes' ); if ( empty( $css_classes ) || strpos( $css_classes, 'child-term-posts-loop' ) === false ) { return $args; } // 获取当前父分类循环中的Term对象 $current_term = \Elementor\Plugin::instance()->loop->get_current_loop_item(); // 验证是否为合法分类对象,设置文章查询的分类过滤条件 if ( $current_term instanceof \WP_Term ) { $args['tax_query'] = array( array( 'taxonomy' => $current_term->taxonomy, 'field' => 'term_id', 'terms' => $current_term->term_id, ), ); } return $args; } add_filter( 'elementor/query/args', 'filter_child_term_posts', 20, 2 );
关键原理说明
- 为什么
get_queried_object()无效:该函数返回的是当前页面的主查询对象(即父分类「Africa」),而非循环组件中正在迭代的子分类项。 \Elementor\Plugin::instance()->loop->get_current_loop_item():Elementor的循环上下文API,能直接获取当前循环迭代中的对象(这里就是子分类Term),是嵌套循环场景下获取当前项的可靠方式。- 分类过滤逻辑:通过
tax_query参数精准筛选出属于当前子分类的文章,实现服务器端高效过滤,避免前端冗余数据加载。
配合原有子分类循环代码
你之前实现的子分类循环代码可以继续使用,两者结合即可完成「父分类归档页展示子分类 + 每个子分类下展示对应文章」的需求:
function get_taxonomy_children( $args, $settings, $display_settings ) { if ( isset( $settings['term_taxonomy_id'] ) && $settings['term_taxonomy_id'] === 'taxonomy_children' ) { $args['term_taxonomy_id'] = ''; $current_term = get_queried_object(); if ( isset( $current_term->term_id ) ) { $args['parent'] = $current_term->term_id; } } return $args; } add_filter( 'elementor/loop_taxonomy/args', 'get_taxonomy_children', 20, 3 );
内容的提问来源于stack exchange,提问作者Digicem
相关产品推荐
相关产品推荐

