Wordpress:如何从自定义分类查询中排除子分类中的帖子?

问题描述 投票:0回答:1

我的 WordPress 主题有一个名为“集合”的自定义分类法。自定义分类法是分层的,因此存在子集合。

我有一个名为“书籍”的集合和一个名为“小说”的子集合。有些帖子只在“书籍”中,有些帖子则在“小说”中。我希望“书籍”集合的页面仅显示主“书籍”集合中的帖子,而不是“小说”子集合中的帖子。但默认情况下,WordPress 在分类查询中包含“子集合”中的帖子。

如何从分类查询中排除子术语中的帖子?这对于类别来说很容易,但似乎没有内置的方法可以使用自定义分类法来做到这一点。


更新: Jan 的解决方案非常有效。这是我使用的代码,放置在index.php中的循环上方:

// if is taxonomy query for 'collections' taxonomy, modify query so only posts in that collection (not posts in subcollections) are shown.
if (is_tax()) {
 if (get_query_var('collection')) {
  $taxonomy_term_id = $wp_query->queried_object_id;
  $taxonomy = 'collection';
  $unwanted_children = get_term_children($taxonomy_term_id, $taxonomy);
  $unwanted_post_ids = get_objects_in_term($unwanted_children, $taxonomy);

  // merge with original query to preserve pagination, etc.
  query_posts( array_merge( array('post__not_in' => $unwanted_post_ids), $wp_query->query) );
 }
}
php mysql wordpress taxonomy
1个回答
3
投票

似乎 WP_Query 类始终包含分层分类法的所有项目。如果你想解决这个问题,你可以使用他们使用的相同技巧:获取分类项的所有子项,然后获取这些子项中的所有帖子 ID,然后将它们放入

post__not_in
参数中:

$unwanted_children = get_term_children($taxonomy_term_id, $taxonomy);
$unwanted_post_ids = get_objects_in_term($unwanted_children, $taxonomy);

这将导致一个具有

AND posts.ID IN (1, 2, 3) AND posts.ID NOT IN (2, 3)
的查询,该查询将仅返回 ID 为 1 的这篇文章。非常不优雅,但它可以工作。

当然,如果你走这条路,你也可以只传递你想要的帖子 ID,而不告诉查询任何有关分类的信息。

如何对类别执行此操作? 查询代码似乎也包含子项。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.