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

如何仅获取同时包含指定双分类的WordPress文章列表?

如何获取同时具备指定双分类的WordPress文章列表

先帮你拆解下现有代码里的核心问题:

  • 你当前代码中的compare'=>'IN'作用是:只要文章属于terms数组里任意一个分类(26或27),就会被筛选出来,这也就是为什么你现在得不到同时具备两个分类的文章。

要实现「同时具备两个指定分类」的需求,我们需要调整tax_query的结构,核心是通过relation参数强制要求所有分类条件同时生效:

修正后的代码片段

if (isset($_POST['bartags']) && !empty($_POST['bartags'])):
    $tags = explode(',', $_POST['bartags']);
    // 确保至少有两个分类参数时才构建AND条件
    if (count($tags) >= 2) {
        $tax_query[] = array(
            'relation' => 'AND', // 关键:要求所有嵌套条件同时满足
            array(
                'taxonomy' => 'bar_tag',
                'terms' => $tags[0],
                'compare' => '='
            ),
            array(
                'taxonomy' => 'bar_tag',
                'terms' => $tags[1],
                'compare' => '='
            )
        );
    } else {
        // 如果仅传入单个分类,保留原逻辑兼容单分类筛选
        $tax_query[] = array(
            'taxonomy' => 'bar_tag',
            'terms' => $tags,
            'compare' => 'IN'
        );
    }
endif;

关键逻辑说明

  • relation => 'AND':这个参数会告诉WordPress,所有嵌套的分类条件必须同时成立,替代了默认的OR(任意一个条件满足即可)。
  • 拆分分类条件:把每个目标分类单独写成一个条件数组,明确要求文章必须同时属于这两个bar_tag分类。
  • 参数校验:增加count($tags) >= 2的判断,避免参数异常时出错,同时兼容单分类的筛选场景。

如果你的bartags参数可能包含更多分类ID(不止两个),想要获取同时具备所有传入分类的文章,可以用循环生成条件项,扩展性更强:

if (isset($_POST['bartags']) && !empty($_POST['bartags'])):
    $tags = explode(',', $_POST['bartags']);
    $tax_conditions = array();
    
    foreach ($tags as $tag_id) {
        $tax_conditions[] = array(
            'taxonomy' => 'bar_tag',
            'terms' => trim($tag_id),
            'compare' => '='
        );
    }
    
    if (!empty($tax_conditions)) {
        $tax_query[] = array(
            'relation' => 'AND',
            ...$tax_conditions // 用展开语法导入所有条件项
        );
    }
endif;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:49:25