下面我将从简单到复杂,为你详细介绍几种实现方法。

使用 category-{slug}.php 模板文件(最推荐、最标准)
这是 WordPress 内置的、最官方、最简洁的方法,WordPress 会根据分类的 Slug(别名) 自动寻找并加载对应的模板文件。
工作原理
WordPress 在加载分类页面时,会按照以下优先级顺序查找模板文件:
category-{slug}.php(category-news.php)category-{id}.php(category-7.php)category.phparchive.phpindex.php
实施步骤
第1步:确定分类的 Slug
- 登录你的 WordPress 后台。
- 进入「文章」->「分类目录」。
- 找到你想要应用不同模板的分类,点击「编辑」。
- 在「分类目录别名」(Slug) 字段中,你会看到一个 URL 友好的名称,如果你的分类是“产品教程”,其 Slug 可能是
product-tutorial。请记住这个 Slug。
第2步:创建新的模板文件

在你的主题文件夹(wp-content/themes/your-theme/)中,复制一份现有的 category.php 文件,并将其重命名为 category-{你的slug}.php。
- 示例:
- 如果你的分类 Slug 是
news,你就创建一个名为category-news.php的文件。 - 如果你的分类 Slug 是
products,你就创建一个名为category-products.php的文件。
- 如果你的分类 Slug 是
第3步:编辑新模板文件
你可以自由地编辑 category-news.php 这个文件,你可以修改 HTML 结构、CSS 类、循环(The Loop)的查询参数,或者引入完全不同的组件。
一个简单的 category-news.php 示例:

<?php
/**
* Template for displaying all posts in a category called "News"
*
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/
*
* @package YourThemeName
*/
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main">
<?php if ( have_posts() ) : ?>
<header class="page-header">
<?php
the_archive_title( '<h1 class="page-title">', '</h1>' );
the_archive_description( '<div class="archive-description">', '</div>' );
?>
</header><!-- .page-header -->
<?php
// Start the Loop.
while ( have_posts() ) :
the_post();
/*
* Include the Post-Type-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Type name) and that will be used instead.
*/
get_template_part( 'template-parts/content', get_post_type() );
endwhile;
// Previous/next page navigation.
the_posts_pagination(
array(
'prev_text' => '<span class="nav-prev">' . __( 'Previous page', 'your-theme-textdomain' ) . '</span>',
'next_text' => '<span class="nav-next">' . __( 'Next page', 'Next page', 'your-theme-textdomain' ) . '</span>',
)
);
else :
get_template_part( 'template-parts/content', 'none' );
endif;
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php
get_sidebar();
get_footer();
你可以在这个文件里做任何你想做的改变,比如改变布局、添加侧边栏、或者只显示某种格式的文章等。
使用 category-{id}.php 模板文件
这种方法与方法一类似,但它使用的是分类的 ID 而不是 Slug。
实施步骤
- 找到分类的 ID:在「文章」->「分类目录」中,将鼠标悬停在某个分类上,浏览器状态栏会显示其链接,如
...wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=7&post_type=post,这里的7就是该分类的 ID。 - 创建模板文件:在你的主题文件夹中,创建一个名为
category-7.php的文件(将7替换为你的分类 ID)。 - 编辑文件:和方法一一样,编辑这个新文件来实现自定义布局。
注意:category-{slug}.php 的优先级高于 category-{id}.php,所以如果一个分类同时有 category-news.php 和 category-7.php,WordPress 会加载 category-news.php。
使用插件(适合初学者或非开发者)
如果你不想修改代码,或者你的主题结构比较复杂,使用插件是最简单的方法。
推荐插件:Category Page Templates
这个插件允许你像创建页面模板一样,为分类创建模板。
- 安装并激活插件:在 WordPress 后台搜索 "Category Page Templates" 并安装激活。
- 创建模板文件:
- 在你的主题文件夹中创建一个 PHP 文件,
my-category-template.php。 - 在文件开头添加一个注释,告诉插件这是一个模板:
<?php /* Template Name: My Custom Category Template */ ?>
- 在这个文件中,编写你的自定义模板代码(可以复制
archive.php或category.php的内容进行修改)。
- 在你的主题文件夹中创建一个 PHP 文件,
- 为分类分配模板:
- 进入「文章」->「分类目录」,编辑你想要应用模板的分类。
- 在右侧的「分类页面模板」下拉菜单中,选择你刚刚创建的 "My Custom Category Template"。
- 点击「更新」。
优点:非常直观,无需记住复杂的命名规则,后台操作即可完成。 缺点:增加了一个插件,可能会对网站有轻微的性能影响。
使用 is_category() 条件标签(在现有模板中判断)
如果你不想创建多个文件,只是想在同一个 category.php 文件中根据不同分类显示不同内容,可以使用 is_category() 条件标签。
实施步骤
- 打开你主题的
category.php文件。 - 在 The Loop 循环之前或内部,使用
is_category()函数进行判断。
示例代码:
<?php get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main">
<?php if ( have_posts() ) : ?>
<?php
// 判断是否是 "news" 分类
if ( is_category('news') ) {
// 如果是,显示 "新闻" 分类特有的标题
echo '<h1>最新资讯</h1>';
echo '<p>这里是我们的新闻动态...</p>';
}
// 判断是否是 "products" 分类
elseif ( is_category('products') ) {
// 如果是,显示 "产品" 分类特有的布局
echo '<h1>我们的产品</h1>';
// 可以在这里加载一个完全不同的布局文件
get_template_part('template-parts/category-layout-products');
}
// 其他所有分类
else {
// 显示默认的标题
the_archive_title( '<h1 class="page-title">', '</h1>' );
}
?>
<?php
// 开始正常的文章循环
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/content', get_post_format() );
endwhile;
the_posts_pagination();
?>
<?php else : ?>
// ... 没有找到文章时的显示
<?php endif; ?>
</main>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
优点:文件数量少,逻辑集中。
缺点:当分类和样式变多时,category.php 文件会变得臃肿且难以维护。
总结与最佳实践
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
category-{slug}.php |
官方标准、性能最佳、代码清晰、易于维护 | 需要修改文件、重命名 | 强烈推荐,绝大多数情况下的首选方法。 |
category-{id}.php |
官方支持、直观 | 优先级低于 Slug、ID 改变后失效 | 当 Slug 不确定或包含特殊字符时作为备选。 |
| 插件 | 无需代码、后台操作简单 | 增加插件依赖、可能有轻微性能开销 | 适合不熟悉代码的初学者或快速实现。 |
is_category() |
文件少、逻辑集中 | 代码臃肿、维护困难 | 只需对少数几个分类做微小调整时。 |
最佳实践建议:
- 优先使用
category-{slug}.php,这是最干净、最 WordPress 的方式。 - 在编辑模板文件前,先备份你的主题,特别是
functions.php和主要的模板文件。 - 保持模板文件的命名规范和结构清晰,方便自己和他人日后维护。
- 如果你的主题是商业主题或你计划长期使用,避免使用插件来实现核心功能,以免主题更新或插件失效导致问题。
