存档-{$POST_TYPE}.php未加载。取而代之的是加载默认的Archive.php

时间:2016-02-14 作者:user2227494

我的has-archive 在中设置为trueregister_post_type. 我的archive-portfolio.php 存在。我试过刷新重写规则。我尝试了很多其他的东西,在每一步之后,我都会重置/保存/重新保存/刷新我的永久链接结构。

这是我的register_post_type

register_post_type( \'portfolio\',
    array(
        \'labels\' => array(
            \'name\' => __( \'Portfolio Items\' ),
            \'singular_name\' => __( \'Portfolio Item\' ),
            \'add_new_item\' => __(\'Add New Portfolio Item\')
        ),
        \'supports\' => array(
            \'title\', \'editor\', \'thumbnail\'
        ),
    \'taxonomies\' => array(\'category\', \'post_tag\'),
    \'rewrite\' => array(\'slug\' => \'portfolio\', \'with_front\' => true),
    \'public\' => true,
    \'has_archive\' => true,
    \'slug\' => \'portfolio\',
    \'menu_icon\' => \'dashicons-images-alt2\',
    \'hierarchical\' => false
    )
);
每当我单击“portfolio”类型的帖子所属的类别时,WP都会加载默认值archive.php. 如何让它加载archive-portfolio.php?或者我怎样才能在archive.php 如果用户正在浏览默认的帖子类别存档或公文包类别存档?

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

Category archive pages 不使用archive-{$post_type}.php 键入模板。相反,他们使用category-{$category->slug}.php, category-{$category->term_id}.php, category.php, archive.phpindex.php 取决于层次结构中的第一个可用模板。

一个简单的解决方法就是复制archive-{$post_type}.php 并将其重命名为category.php. 当您访问分类页面时,WordPress将自动使用此模板。根据我从你的问题中得到的信息,你已经使用了pre_get_posts 将自定义帖子类型添加到类别和标记存档。

长期的解决方案是,如果您决定确实需要使用archive-{$post_type}.php, 就是利用category_template 筛选以告知WordPress使用此模板,而不是层次结构中可能提供的其他模板

add_filter( \'category_template\', function ( $template )
{
    // Try to locate our new desired template
    $locate_template = locate_template( \'archive-portfolio.php\' );

    // If our desired template is not found, bail
    if ( !$locate_template )
        return $template;

    // Our desired template exists, load it
    return $locate_template;
});
如果您以任何方式使用自定义查询将自定义帖子类型包括到标记和类别存档中,请删除该自定义查询并返回默认循环:(NOTE: 这同样适用于主页和index.php

if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();

            // Add your mark up and template tags

    }
}
当您访问类别或标记存档页面时,现在不应该看到任何自定义帖子类型的帖子。要包含自定义帖子类型的帖子,我们将使用pre_get_posts 将自定义帖子类型添加到类别和标记存档页面的步骤

add_action( \'pre_get_posts\', function ( $q )
{
    if (    !is_admin()         // Only target front pages
         && $q->is_main_query() // Only target the main query
         && (    $q->is_category() // Target category archives OR
              || $q->is_tag()      // Target tag achives OR
              || $q->is_home()     // Target the home page
            )
    ) {
        $q->set( \'post_ype\', [\'post\', \'portfolio\'] );
    }
});

相关推荐