Category archive pages 不使用archive-{$post_type}.php
键入模板。相反,他们使用category-{$category->slug}.php
, category-{$category->term_id}.php
, category.php
, archive.php
或index.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\'] );
}
});