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

WordPress中如何筛选同时满足genre和quality双条件的自定义分类术语?

解决方法

首先需要明确:genre和quality是两个独立的自定义分类法,一个分类术语不可能同时隶属于两个不同的分类法。结合你的描述,你的需求大概率是筛选出同时被标记为genre=action和quality=HD的movie自定义文章,再提取这些文章关联的分类术语,或是直接获取这两个特定分类术语并组合展示。下面分两种场景说明:

场景1:获取符合双分类条件的文章,提取关联的分类术语

使用WP_Query查询同时满足两个分类条件的movie文章,再遍历文章提取所有关联的分类术语(自动去重):

// 构建查询参数:筛选同时属于genre=action和quality=HD的movie文章
$args = array(
    'post_type' => 'movie',
    'posts_per_page' => -1, // 获取所有符合条件的文章
    'tax_query' => array(
        'relation' => 'AND', // 两个分类条件必须同时满足
        array(
            'taxonomy' => 'genre',
            'field' => 'slug', // 可根据实际情况改为name或term_id
            'terms' => 'action',
        ),
        array(
            'taxonomy' => 'quality',
            'field' => 'slug',
            'terms' => 'HD',
        ),
    ),
);

$query = new WP_Query($args);

if ($query->have_posts()) {
    $all_terms = array(); // 存储所有关联术语,避免重复
    while ($query->have_posts()) {
        $query->the_post();
        
        // 获取当前文章的genre分类术语
        $genre_terms = get_the_terms(get_the_ID(), 'genre');
        if ($genre_terms && !is_wp_error($genre_terms)) {
            foreach ($genre_terms as $term) {
                $all_terms[$term->term_id] = $term;
            }
        }
        
        // 获取当前文章的quality分类术语
        $quality_terms = get_the_terms(get_the_ID(), 'quality');
        if ($quality_terms && !is_wp_error($quality_terms)) {
            foreach ($quality_terms as $term) {
                $all_terms[$term->term_id] = $term;
            }
        }
    }
    wp_reset_postdata(); // 重置查询状态

    // 输出所有分类术语名称
    foreach ($all_terms as $term) {
        echo $term->name . '<br>';
    }
} else {
    echo '未找到符合条件的文章';
}

场景2:直接获取action和HD两个特定分类术语

如果你只是需要这两个指定的分类术语,可分别调用get_terms获取后合并:

// 获取genre分类下的action术语
$action_terms = get_terms(array(
    'taxonomy' => 'genre',
    'slug' => 'action',
    'hide_empty' => false,
));

// 获取quality分类下的HD术语
$hd_terms = get_terms(array(
    'taxonomy' => 'quality',
    'slug' => 'HD',
    'hide_empty' => false,
));

// 合并两个术语数组
$combined_terms = array_merge($action_terms, $hd_terms);

// 输出术语名称
foreach ($combined_terms as $term) {
    echo $term->name . '<br>';
}

纠正你当前代码的错误

你当前的get_terms参数写法不符合WordPress规范,get_terms没有'genre' => 'action'这种参数用法。正确写法需要先指定分类法taxonomy,再用slug/name/term_id筛选特定术语:

// 正确获取genre分类下的action术语
$terms = get_terms(array(
    'taxonomy' => 'genre',
    'slug' => 'action',
    'hide_empty' => false,
));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:30:51