WordPress自定义分类法分类下所有文章查询异常求助
解决WP_Query无法获取仅属于指定父分类文章的问题
问题根源分析
你的代码存在两个核心问题,导致查询结果不符合预期:
- 语法错误:变量
$taxonomy_category的字符串未闭合,缺少末尾单引号,导致变量值无效。 - 参数不匹配:
tax_query中指定field => 'id',但传入的terms是分类的slug(links_category1)而非分类ID,查询逻辑完全错位。
另外默认情况下tax_query的include_children参数为true,会返回该分类及其所有子分类下的文章(包括仅属于父分类的文章),但参数不匹配直接导致了查询结果异常。
修正后的代码方案
根据你的需求(获取属于links_category1分类的所有文章,无论是否同时属于其子分类),修正代码如下:
// 修复单引号闭合问题,这里传入的是分类slug $taxonomy_category = 'links_category1'; $args = array ( 'post_type' => 'links', 'tax_query' => array( array ( 'taxonomy' => 'links_categories', 'field' => 'slug', // 因为terms传的是slug,field对应改为slug 'terms' => $taxonomy_category, 'include_children' => true, // 默认值为true,可省略,明确写出更清晰 ) ), 'orderby' => 'title', 'order' => 'ASC' ); // 初始化查询 $the_query_links_list = new WP_Query( $args );
额外需求处理(仅获取父分类专属文章)
如果你的实际需求是只获取属于links_category1、不属于任何其子分类的文章,需要添加排除子分类的逻辑:
// 通过slug获取父分类ID $parent_cat_id = get_term_by('slug', 'links_category1', 'links_categories')->term_id; // 获取父分类下所有子分类的ID集合 $child_cat_ids = get_term_children($parent_cat_id, 'links_categories'); $args = array ( 'post_type' => 'links', 'tax_query' => array( 'relation' => 'AND', array ( 'taxonomy' => 'links_categories', 'field' => 'id', 'terms' => $parent_cat_id, ), array ( 'taxonomy' => 'links_categories', 'field' => 'id', 'terms' => $child_cat_ids, 'operator' => 'NOT IN', // 排除属于子分类的文章 ) ), 'orderby' => 'title', 'order' => 'ASC' ); $the_query_links_list = new WP_Query( $args );
内容的提问来源于stack exchange,提问作者DYoshizawa
相关产品推荐
相关产品推荐

