如何在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
相关产品推荐
相关产品推荐

