【问题标题】:Wordpress: How can I exclude posts in child taxonomies from a custom taxonomy query?Wordpress:如何从自定义分类查询中排除子分类中的帖子?
【发布时间】:2010-08-10 14:06:56
【问题描述】:

我的 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) );
 }
}

【问题讨论】:

    标签: mysql wordpress taxonomy


    【解决方案1】:

    似乎是 WP_Query 类 always includes all items of hierarchical taxonomies。如果你想解决这个问题,你可以使用他们使用的相同技巧:获取分类项的所有子项,然后获取这些子项中的所有帖子 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,而不告诉查询任何关于分类的内容。

    您如何为类别执行此操作? The query code seems to include children there too.

    【讨论】:

    • 谢谢,效果很好!对于类别,您可以使用“category__in”参数,该参数不包括子类别中的帖子。不幸的是,Wordpress 还没有用于分层自定义分类法的等效参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2017-06-03
    • 2018-10-24
    相关资源
    最近更新 更多