2

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

我有一个名为“Books”的集合和一个名为“Novels”的子集合。有些帖子只在“书籍”中,有些帖子在“小说”中。我希望“书籍”集合的页面只显示主“书籍”集合中的帖子,而不是“小说”子集合中的帖子。但默认情况下,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) );
 }
}
4

1 回答 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,而不告诉查询任何关于分类的内容。

您如何为类别执行此操作?查询代码似乎也包括那里的孩子。

于 2010-08-10T21:04:15.950 回答