在类别页面上显示自定义帖子类型,但不在博客列表上显示

时间:2011-05-27 作者:AMcDermott

我认为这是一个相当简单的问题,但我还没有意识到这一点。

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?

2 个回复
最合适的回答,由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

结束

相关推荐

是否从wp_list_categories中筛选“非活动”类别?

我想在类别编辑器屏幕中添加一个复选框,以允许“停用”类别(可能是在网站所有者处理类别内容和帖子时)。完成此操作后,我可以选择哪些选项来排除设置为“非活动”的类别?我认为可以这样做的一种方法是,只需在wp\\u list\\u类别上运行一个过滤器,然后在exlude=list中插入一个实用程序函数,该函数将返回选中inactive为true的所有cat\\u id。还有其他方法吗?