在开发 WordPress 主题时,我们通常希望子分类页面能继续使用其父分类的页面模板,这样可以显著减少重复开发的工作量。
那么,如何让 WordPress 子分类页面自动使用父分类的模板呢?本教程将详细解答。
// WordPress子分类页面使用父分类页面模板
add_filter('category_template', 'f_category_template');
function f_category_template($template) {
$category = get_queried_object();
// 如果当前分类有父级,则向上追溯至顶级父分类
if ($category->parent != '0') {
while ($category->parent != '0') {
$category = get_category($category->parent);
}
}
$templates = array();
if ($category) {
// 优先查找以父分类别名或ID命名的模板文件
$templates[] = "category-{$category->slug}.php";
$templates[] = "category-{$category->term_id}.php";
}
// 最后回退到默认的 category.php
$templates[] = 'category.php';
return locate_template($templates);
}
使用教程
将上述代码复制到当前主题的 functions.php 文件中即可生效。
功能说明
这段代码通过 WordPress 的 category_template 过滤器,修改了分类页面的模板查找逻辑。其工作流程如下:
- 获取当前被访问的分类对象。
- 检查该分类是否有父级(
parent != '0')。 - 如果有,则通过循环不断向上追溯,直到找到最顶级的父分类。
- 然后,系统将优先查找以下模板文件:
category-{顶级父分类别名}.phpcategory-{顶级父分类ID}.php
- 如果上述文件都不存在,则回退到默认的
category.php。
注意事项
- 此方法仅适用于 WordPress 原生的“分类”(Categories)。对于自定义分类法,需要使用对应的过滤器,例如
taxonomy_template。 - 请确保你的主题目录下存在对应的模板文件(如
category.php),否则页面将无法正常显示。 - 代码修改后,建议清空站点缓存以确保更改生效。