类别页面上的多个自定义帖子类型

时间:2018-12-05 作者:shanebp

是否可以在类别页面上显示多个自定义帖子类型?

例如,我有一个类别“动物”,我可以将其分配给这两种自定义帖子类型:“狗”、“猫”

两个CPT都使用pre\\u get\\u posts筛选器:

function dog_query_post_type($query) {

    if( is_category() &&  $query->is_main_query() && empty( $query->query_vars[\'suppress_filters\'] ) ) {
        $post_type = get_query_var(\'post_type\');
        if($post_type)
            $post_type = $post_type;
        else
            $post_type = array( \'post\', \'dog\', \'nav_menu_item\');

        $query->set(\'post_type\',$post_type);

        return $query;
    }

}
add_filter(\'pre_get_posts\', \'dog_query_post_type\');
但是只有一个cpt会出现在动物分类页面上。

如果我停用了狗的cpt插件,那么分配给动物的任何猫的cpt都会出现在分类页面上。

我已尝试更改add\\u filter调用的优先级设置。

所有这些都不会影响类别中正常帖子在类别页面上的显示。

我想让任何类型的帖子出现在动物页面上。

我错过了什么?

1 个回复
最合适的回答,由SO网友:shanebp 整理而成

添加到$post_type 数组,不要替换它。。。

function dog_query_post_type($query) {

    if( is_category() &&  $query->is_main_query() && empty( $query->query_vars[\'suppress_filters\'] ) ) {
        $post_type = get_query_var(\'post_type\');
        if($post_type)
            $post_type[] = \'dog\';
        else
            $post_type = array( \'post\', \'dog\', \'nav_menu_item\');

        $query->set(\'post_type\',$post_type);

        return $query;
    }

}
add_filter(\'pre_get_posts\', \'dog_query_post_type\');