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

WordPress Elementor自定义查询:需匹配全部分类法术语

解决方案:匹配所有分类术语+指定分类的产品筛选

要实现同时满足「包含当前文章所有models分类术语」和「属于free-play-adapter产品分类」的产品筛选,核心是正确构建tax_query的逻辑关系。以下是可行的代码实现及问题分析:

代码实现

// 获取当前文章的所有models分类术语(以slug格式返回,需与后续查询字段匹配)
$current_model_slugs = wp_get_post_terms( get_the_ID(), 'models', array( 'fields' => 'slugs' ) );

// 若当前文章无models术语,直接终止查询避免无效请求
if ( empty( $current_model_slugs ) ) {
    echo '无匹配的相关产品';
    return;
}

// 构建产品查询参数
$related_products_args = array(
    'post_type'      => 'product',
    'posts_per_page' => 8, // 根据需求调整展示数量
    'no_found_rows'  => true, // 无需分页时开启,提升性能
    'tax_query'      => array(
        'relation' => 'AND', // 两个分类条件必须同时满足
        // 条件1:产品包含当前文章的所有models术语
        array(
            'taxonomy' => 'models',
            'field'    => 'slug',
            'terms'    => $current_model_slugs,
            'operator' => 'AND', // 强制匹配所有术语,而非任意一个
        ),
        // 条件2:产品属于free-play-adapter分类
        array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => 'free-play-adapter',
        ),
    ),
);

// 执行查询并输出产品
$related_products = new WP_Query( $related_products_args );
if ( $related_products->have_posts() ) {
    while ( $related_products->have_posts() ) {
        $related_products->the_post();
        // 替换为你的产品展示模板代码
        printf( '<div class="related-product"><a href="%s">%s</a></div>', get_permalink(), get_the_title() );
    }
    wp_reset_postdata();
} else {
    echo '无匹配的相关产品';
}

之前尝试失败的原因分析

  1. 第一次添加AND无结果:
    • 可能是terms数组传递格式错误(比如传递了术语ID却用slug作为查询字段),或者当前站点中没有同时包含所有models术语的产品。建议先打印$current_model_slugs确认术语是否正确获取,再检查对应产品的分类设置。
  2. 第二次无论是否加操作符都无返回:
    • 大概率是tax_query的结构错误,比如未设置外层relation为AND,或者分类法名称拼写错误(比如把product_cat写成category)。
  3. 第三次仅匹配任意术语:
    • tax_query中同一分类法下的术语默认operator为IN,即匹配包含任意一个术语的产品,必须显式设置operator => 'AND'才能强制匹配所有术语。

注意事项

  • 确保models分类法已正确关联到product自定义文章类型(可通过注册分类法时的object_type参数确认)。
  • 若使用术语ID而非slug查询,需将wp_get_post_terms的fields改为ids,同时tax_query中的field设为term_id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:48:11