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

如何在WordPress的PHP查询中组合两个category_name筛选条件?

解决分类组合查询的问题

首先,你当前代码里的数组存在重复键名,'category_name' => $post->post_name会被后面的'category_name' => 'featured'完全覆盖,实际查询只会拉取featured分类的内容。要组合两个分类,分两种场景处理:

1. 同时属于两个分类(交集)

如果需要查询既属于$post->post_name对应的分类,又属于featured分类的内容,直接用加号+连接两个分类别名:

$args = array(
    'post_type'     => 'project',
    'posts_per_page' => 2, // 建议用posts_per_page替代已废弃的showposts
    'category_name' => $post->post_name . '+featured',
    'orderby'       => 'menu_order',
    'order'         => 'ASC',
);

2. 属于任意一个分类(并集)

如果需要查询属于$post->post_name对应的分类,或者属于featured分类的内容,用逗号,连接两个分类别名:

$args = array(
    'post_type'     => 'project',
    'posts_per_page' => 2,
    'category_name' => $post->post_name . ',featured',
    'orderby'       => 'menu_order',
    'order'         => 'ASC',
);
关于复杂分类筛选的需求

你提到的“在同一个category_name下设置两种不同的筛选规则”,category_name参数本身只能做简单的别名匹配,无法实现复杂逻辑。如果需要更灵活的筛选(比如“属于分类A但不属于分类B”、“多个分类组的逻辑组合”),应该用tax_query参数,这是WordPress查询分类/自定义分类法的更强大方式。

举个例子,查询“属于$post->post_name分类,并且不属于featured分类”的内容:

$args = array(
    'post_type'     => 'project',
    'posts_per_page' => 2,
    'orderby'       => 'menu_order',
    'order'         => 'ASC',
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'category', // 默认文章分类的分类法名称为category
            'field'    => 'slug', // 按分类别名查询
            'terms'    => $post->post_name,
        ),
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => 'featured',
            'operator' => 'NOT IN', // 排除该分类下的内容
        ),
    ),
);

补充说明:showposts参数已被官方废弃,建议改用posts_per_page控制显示数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:15:31