WordPress自定义文章类型分类访问问题:无法调用archive-destinos.php
解决WordPress分类“Países”跳转至自定义文章类型Destinos归档模板的问题
作为WordPress新手,遇到这种分类和自定义文章类型(CPT)的联动问题很正常,我来一步步帮你搞定:
步骤1:修改分类页面查询,只展示Destinos内容
默认分类页面会显示所有文章类型(包括默认的post)的内容,我们需要用pre_get_posts钩子限定查询结果仅包含你的Destinos自定义文章类型。
把下面的代码添加到你主题的functions.php文件里(建议用子主题修改,避免主题更新丢失代码):
function filter_paises_category_query( $query ) { // 仅针对前台主查询,且当前是"Países"分类页面 if ( ! is_admin() && $query->is_main_query() && is_category( 'paises' ) ) { // 设置查询只返回Destinos类型的内容 $query->set( 'post_type', 'destinos' ); } } add_action( 'pre_get_posts', 'filter_paises_category_query' );
这段代码的作用是:当用户访问/category/paises页面时,自动把查询结果替换成Destinos类型下属于该分类的内容。
步骤2:让分类页面复用archive-destinos.php模板
现在查询内容已经正确,但页面还是会用默认的分类模板(比如category.php)。如果想直接复用archive-destinos.php的布局和样式,继续在functions.php里添加这段代码:
function use_destinos_archive_for_paises_category( $template ) { // 检查当前是否是"Países"分类页面 if ( is_category( 'paises' ) ) { // 查找主题中的archive-destinos.php模板 $destinos_template = locate_template( 'archive-destinos.php' ); // 找到模板就替换当前使用的模板 if ( $destinos_template ) { return $destinos_template; } } // 其他情况返回默认模板 return $template; } add_filter( 'template_include', 'use_destinos_archive_for_paises_category' );
备选方案:复制模板并重命名(更直观)
如果你不想写代码,也可以直接复制主题里的archive-destinos.php文件,把副本改名为category-paises.php,然后放到主题根目录下。WordPress会自动识别这个模板是专门给Países分类使用的,无需额外配置。
验证效果
完成操作后刷新/category/paises页面,就能看到和/destinos页面完全一致的布局,且只展示Destinos类型下属于该分类的内容了。
内容的提问来源于stack exchange,提问作者Yeiser Pérez Mirabal
相关产品推荐
相关产品推荐

