显示自定义帖子类型的类别档案

时间:2012-07-04 作者:indextwo

遗憾的是,我在定制帖子类型上迟到了,而且是最近才开始使用的,所以如果我的问题看起来很愚蠢,我很抱歉,但我似乎找不到问题的答案。

我已经设置了一个自定义帖子类型,名为actors 有几个自定义字段值,而且(至关重要的是),我使用标准类别将这些参与者分为men, womenchildren 列表:

\'taxonomies\' => array(\'category\', \'post_tag\')
。。。因为我认为那会是一种更干净整洁的。。。对演员进行分类。然而,我完全不知道如何以任何方式、形状或形式实际显示这些类别。

我有个习惯archive-actors.php 显示所有演员的文件,但我希望能够按类别过滤他们;e、 g.仅显示men. 然而,如果我猜测一个标准URL,如mysite.com/category/actors/men 我只是

抱歉,男性类别中还没有任何帖子。

如果我尝试一下,也会发生同样的事情mysite.com/category/men - 在这两种情况下,都不能使用archive-actors.php 模板。

谁能帮我扫除头脑迟钝的迷雾,为我指明正确的方向,这样我就可以过滤掉这些讨厌的演员?

Edit:

正如@mrwweb在下面提到的(我忘了提到我已经试过了),以下内容可以添加到functions.php 文件:

function query_post_type($query) {
    $post_types = get_post_types();

    if ( is_category() || is_tag()) {

        $post_type = get_query_var(\'actors\');

        if ( $post_type ) {
            $post_type = $post_type;
        } else {
            $post_type = $post_types;
        }

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

        return $query;
    }
}

add_filter(\'pre_get_posts\', \'query_post_type\');
。。。参考文献here 哪一个可以正常显示我的分类自定义帖子类型archive.php 第页,但未使用archive-actors.php, 这是关键。

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

您可以强制将模板用于category_template 过滤器:

function wpa57439_category_template( $templates = \'\' ){
    if( !is_array( $templates ) && !empty( $templates ) ) {
        $templates = locate_template( array( \'archive-actors.php\', $templates ), false );
    } 
    elseif( empty( $templates ) ) {
        $templates = locate_template( \'archive-actors.php\', false );
    }
    else {
        $new_template = locate_template( array( \'archive-actors.php\' ) );
        if( !empty( $new_template ) ) array_unshift( $templates, $new_template );
    }
    return $templates;
}
add_filter( \'category_template\', \'wpa57439_category_template\' );
改编自Filter Hierarchy 在法典中。

SO网友:Darren

或者,您可以只添加一个新的wp\\U重写规则来创建一个新的url结构,以便仅显示给定cpt和类别中的帖子。有点像。我在这里发布的要点:

[编辑:无法嵌入。注册因此,下面是代码和linky ]

/**
* This could be extrapolated and used for tags or any other taxonomy really.
*/

add_action(\'init\', \'category_cpt_rewrites\');

function category_cpt_rewrites() {
    $custom_post_types = array(\'video\', \'audio\', \'photo\', \'file\'); //some example post types
    foreach ( $custom_post_types as $post_type ) {
        $rule = \'^\' . $post_type . \'/category/(.+?)/?$\';
        $rewrite = \'index.php?post_type=\' . $post_type . \'&category_name=$matches[1]\';
        add_rewrite_rule($rule,$rewrite,\'top\');
    }
}

//make sure you flush rules
//this will take the following url structure (video cpt as an example, and politics as a category example) -> video/category/politics and return posts belonging to the politics category that are in the "video" custom post type.

//note that if you want this to be truly effective you\'ll want to make a custom "the_category()" or similar template function to return the correct url structure for a category list belonging to a custom post type post.

SO网友:mrwweb

这是类别存档的预期行为。已找到的here 在支持论坛上,以下代码片段应该可以解决您的问题(只需将“文章”更改为您的帖子类型):

add_filter(\'pre_get_posts\', \'query_post_type\');
function query_post_type($query) {
  if(is_category() || is_tag()) {
    $post_type = get_query_var(\'post_type\');
    if($post_type)
        $post_type = $post_type;
    else
        $post_type = array(\'post\',\'articles\',\'nav_menu_item\');
    $query->set(\'post_type\',$post_type);
    return $query;
    }
}
更新:Gah。我抓错了片段。我想用这个。

结束

相关推荐

NEXT_POST_LINK()中的EXCLUDE_CATEGORIES参数行为异常

我有一个Wordpress模板。php页面。该页面有“下一页”和“上一页”箭头,允许浏览所有帖子。我想将某些类别的帖子排除在“下一个”和“上一个”计算中。我有以下代码: // in single.php next_post_link( \'%link\', \'← Previous\', false, \'11 and 13 and 15\'); 这应该会显示到下一篇文章的链接。第11、13和15类的职位不应按照the $ignore_categories para