什么是分类模板?
分类模板是 WordPress 主题中一个特殊的 PHP 文件,当用户访问某个分类法(最常见的是“分类”)的归档页面时,WordPress 会自动加载这个文件来显示该分类下的所有文章。

它就是某个分类的专属“首页”,你可以为不同的分类设置完全不同的布局和样式。
WordPress 模板加载机制(优先级)
要理解如何创建和使用分类模板,首先要明白 WordPress 的模板加载优先级,当访问一个分类页面时(https://example.com/category/news/),WordPress 会按以下顺序寻找并加载第一个存在的文件:
-
category-{slug}.php- 最高优先级- 这是最灵活、最推荐的方式。
{slug}是分类的“别名”(slug),你的分类别名是news,WordPress 就会寻找category-news.php文件。- 如果你的分类别名是
tech-tips,WordPress 就会寻找category-tech-tips.php。
-
category-{id}.php
(图片来源网络,侵删)- 这种方式基于分类的 ID。
- 你的分类 ID 是
5,WordPress 就会寻找category-5.php文件。 - 适用于别名可能改变,但 ID 是固定的情况。
-
category.php- 这是一个通用的分类模板。
- 如果上面两种特定命名的文件都不存在,WordPress 就会加载这个文件。
- 所有分类页面都会使用这个模板,除非有更具体的模板覆盖它。
-
archive.php- 这是一个更通用的归档模板。
category.php也不存在,WordPress 就会加载archive.php,它用于显示所有类型的归档页面,包括分类、标签、作者、日期等。
-
index.php- 这是最后的后备模板,也是 WordPress 主题的默认主页模板。
- 如果以上所有文件都不存在,WordPress 最终会加载
index.php。
创建模板时,优先级从高到低,要为特定分类定制,就创建 category-{slug}.php;要为所有分类定制,就创建 category.php。

如何创建一个分类模板
假设我们要为“新闻”这个分类(别名为 news)创建一个特殊的模板。
步骤 1:创建模板文件
在你的主题根目录下(wp-content/themes/your-theme/),创建一个新的 PHP 文件,命名为 category-news.php。
步骤 2:添加模板头部注释
这是 WordPress 识别模板文件的关键,在文件的最顶部,添加以下注释:
<?php /** * Template for displaying all posts in a category: News * * @package YourThemeName */
Template Name(可选): 如果你希望这个模板能在“外观 > 主题编辑器”中被选择和预览,可以加上这个,但对于分类模板,通常不需要,因为它是自动加载的。@package: 填写你的主题名称,这是一个好习惯。
步骤 3:构建模板的基本结构
一个标准的 WordPress 模板文件通常包含以下几个部分:
- 调用
header.php: 加载网站头部。 - 主循环: 显示该分类下的文章。
- 调用
sidebar.php: 加载侧边栏(可选)。 - 调用
footer.php: 加载网站底部。
下面是一个完整的 category-news.php 示例:
<?php
/**
* Template for displaying all posts in a category: News
*
* @package YourThemeName
*/
// 1. 调用头部模板
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main">
<?php
// 2. 开始 WordPress 主循环
if ( have_posts() ) :
// 如果是一个分类页面,显示分类标题和描述
the_archive_title( '<h1 class="page-title">', '</h1>' );
the_archive_description( '<div class="archive-description">', '</div>' );
// 开始文章列表
while ( have_posts() ) :
the_post();
// 加载内容模板,content.php 或 content-news.php
get_template_part( 'template-parts/content', get_post_format() );
endwhile;
// 文章分页导航
the_posts_pagination(
array(
'prev_text' => __( 'Previous page', 'your-theme-textdomain' ),
'next_text' => __( 'Next page', 'your-theme-textdomain' ),
)
);
else :
// 如果没有文章,加载 no-content 模板
get_template_part( 'template-parts/content', 'none' );
endif;
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php
// 3. 调用侧边栏
get_sidebar();
// 4. 调用底部模板
get_footer();
在模板中获取当前分类信息
在分类模板中,你经常需要获取当前分类的信息来进行个性化展示,可以使用以下全局函数:
get_queried_object(): 获取当前查询的对象,对于分类页面,这个对象就是WP_Term对象,包含了该分类的所有信息。single_cat_title(): 直接输出当前分类的标题。category_description(): 获取当前分类的描述。
示例:
<?php // 获取当前分类对象 $current_category = get_queried_object(); // 输出分类标题 echo '<h1>' . esc_html( $current_category->name ) . '</h1>'; // 输出分类描述 echo '<p>' . esc_html( $current_category->description ) . '</p>'; // 输出分类链接 echo '<a href="' . esc_url( get_category_link( $current_category->term_id ) ) . '">查看所有 "' . esc_html( $current_category->name ) . '" 文章</a>'; ?>
高级技巧:为不同分类使用完全不同的布局
这是分类模板最强大的功能。“新闻”分类是三栏布局,而“产品”分类是单栏大图布局。
-
为“新闻”分类创建
category-news.php:<?php get_header(); ?> <div class="news-layout three-columns"> <main>文章列表...</main> <aside>侧边栏...</aside> </div> <?php get_footer(); ?> -
为“产品”分类创建
category-products.php:<?php get_header(); ?> <div class="product-layout single-column"> <main>产品列表...</main> </div> <?php get_footer(); ?> -
为所有其他分类创建通用的
category.php:<?php get_header(); ?> <div class="default-layout two-columns"> <main>默认文章列表...</main> <aside>默认侧边栏...</aside> </div> <?php get_footer(); ?>
这样,当用户访问不同分类时,WordPress 会自动加载对应的模板文件,实现完全不同的页面布局和设计。
最佳实践
- 使用子主题: 对主题文件进行任何修改前,强烈建议使用子主题,这样在主题更新时,你的修改不会被覆盖。
- 模块化: 使用
get_template_part()来加载内容片段(如content.php),而不是把所有 HTML 都写在主循环里,这样更容易维护和复用。 - 保持通用性: 创建一个功能完善的通用
category.php作为基础,只为那些确实需要特殊布局的分类创建特定的category-{slug}.php文件,覆盖通用模板。 - 清晰命名: 给你的模板文件和函数起一个清晰、有意义的名字,方便自己和他人理解。
- 性能考虑: 分类页面可能会显示大量文章,确保你的分页功能正常工作,并考虑使用插件(如 WP-PageNavi)或优化
the_posts_pagination()来提升用户体验。
希望这份详细的指南能帮助你完全掌握 WordPress 分类模板!
