博客 / WordPress/ WordPress子分类页面使用父分类页面模板

WordPress子分类页面使用父分类页面模板

WordPress子分类页面使用父分类页面模板

在开发 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 过滤器,修改了分类页面的模板查找逻辑。其工作流程如下:

  1. 获取当前被访问的分类对象。
  2. 检查该分类是否有父级(parent != '0')。
  3. 如果有,则通过循环不断向上追溯,直到找到最顶级的父分类。
  4. 然后,系统将优先查找以下模板文件:
    • category-{顶级父分类别名}.php
    • category-{顶级父分类ID}.php
  5. 如果上述文件都不存在,则回退到默认的 category.php

注意事项

  • 此方法仅适用于 WordPress 原生的“分类”(Categories)。对于自定义分类法,需要使用对应的过滤器,例如 taxonomy_template
  • 请确保你的主题目录下存在对应的模板文件(如 category.php),否则页面将无法正常显示。
  • 代码修改后,建议清空站点缓存以确保更改生效。

发表评论

您的邮箱不会公开。必填项已用 * 标注。