我认为这是一个相当简单的问题,但我还没有意识到这一点。
Question: how do I get my custom posts to show only on the category archives, but not in the blog post listing page?
背景:我有一个自定义帖子类型“video”,其中has\\u archive true和“taxonomies”=>数组(\'category\',post\\u tag\')-我想将标准类别与此自定义帖子类型一起使用。
通过设置post\\u type并使用钩子pre\\u get\\u posts,我成功地获得了要显示的类别页面,如下所示:
function my_query_post_type($query) {
if ( is_home() && false == $query->query_vars[\'suppress_filters\'] )
$query->set( \'post_type\', array( \'post\', \'video\', \'attachment\' ) );
return $query;
}
add_filter(\'pre_get_posts\', \'my_query_post_type\');
如果我不使用pre\\u get\\u posts,那么我的视频就不会显示-正如预期的那样。
然而,现在我的博客帖子列表页面显示了自定义帖子-正如预期的那样,因为我已经更改了查询中的post\\u类型。
Question: how do I get my custom posts to show only on the category archives, but not in the blog post listing page?
最合适的回答,由SO网友:Chip Bennett 整理而成
这可能过于简单,但您是否尝试过改变is_home()
到is_category()
, 在此行中:
if ( is_home() && false == $query->query_vars[\'suppress_filters\'] )
即将其更改为:
if ( is_category() && false == $query->query_vars[\'suppress_filters\'] )
无论如何,值得一试。。。
SO网友:Matthew Hume
这很难解释,但如果其他人看到了这个问题,他们会很感激,因为我直到几个月后添加其他定制时才发现这个bug。我发现了!is_admin()
需要,以防止在管理页面中触发此查询。当我在类别上的一行中过滤两次以在两个不同类别的帖子之间切换时,出现了一个错误。当我只过滤一次时,不会发生错误。它总是在第二次尝试过滤时出现。类别之间的切换对我来说很重要,因为我添加了两个额外的快速编辑字段来处理帖子的排序。
所以我补充道!is_admin()
从而消除了问题。
is_category() && (!is_admin()) && false == $query->query_vars[\'suppress_filters\']
在第二次尝试筛选类别后,我的URL变成了以下丑陋的东西:
edit.php?post_status=all&post_type=Array&_wpnonce=09d0e899fa&_wp_http_referer=%2Fironglasslighting.org%2Fwp-admin%2Fedit.php%3Fs%26post_status%3Dall%26post_type%3Dproduct%26action%3D-1%26m%3D201112%26cat%3D31%26paged%3D1%26mode%3Dlist%26action2%3D-1&action=-1&m=201112&cat=27&paged=1&mode=list&action2=-1