使用 category-{slug}.php 模板文件 (最推荐)
这是 WordPress 内置的、最标准也是最简单的方法,WordPress 有一个非常清晰的模板加载层级,它会根据特定的文件名来加载对应的模板。

(图片来源网络,侵删)
工作原理
WordPress 在显示分类归档页面时,会按照以下优先级顺序查找模板文件:
category-{slug}.phpcategory-{id}.phpcategory.phparchive.phpindex.php
这里的 {slug} 是你的分类别名,{id} 是你的分类ID。
操作步骤
-
找到你的分类别名和ID
- 登录你的 WordPress 后台。
- 进入「文章」>「分类目录」。
- 找到你想要应用不同模板的分类,点击编辑。
- 在浏览器地址栏中,你会看到类似
.../wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=7&post_type=post的 URL。tag_ID=7中的7就是这个分类的 ID。- 在「别名」输入框中,你可以看到一个由小写字母、数字和连字符组成的值,这就是 Slug,如果你的分类是“产品”,slug 可能是
products。
-
创建新的模板文件
(图片来源网络,侵删)- 通过 FTP 或你的主机文件管理器,访问你的主题文件夹
wp-content/themes/你的主题名/。 - 复制一个现有的模板文件作为基础,最理想的选择是复制
archive.php,因为这个文件就是用来显示归档页面的。 - 将复制的文件重命名为
category-你的别名.php。- 示例:如果你的分类别名为
news,那么文件名就应该是category-news.php。 - 示例:如果你的分类别名为
products,那么文件名就应该是category-products.php。
- 示例:如果你的分类别名为
- 通过 FTP 或你的主机文件管理器,访问你的主题文件夹
-
编辑新模板文件
- 打开你刚刚创建的新模板文件(
category-news.php)。 - 在文件顶部,你可以添加一个注释来标明这个模板的用途,但这不是必须的。
- 你可以像编辑普通 PHP 文件一样,自由地修改这个模板的 HTML 结构、CSS 类和 PHP 代码,以实现你想要的独特布局。
- 示例:你可以为“新闻”分类创建一个带有侧边栏的单列布局,而为“产品”分类创建一个无侧边栏的双列网格布局。
- 打开你刚刚创建的新模板文件(
-
验证效果
- 保存文件。
- 访问你的网站,并点击该分类的链接,或者直接访问
你的网站域名/?cat=分类ID或你的网站域名/category/分类别名/。 - 你应该能看到你自定义的新模板已经生效了。
优点:
- 简单直观,遵循 WordPress 核心规则。
- 无需任何代码,只需创建和编辑文件即可。
- 性能最好,是 WordPress 原生支持的方式。
使用 category.php 和 is_category() 条件标签 (更灵活)
如果你不想为每个分类都创建一个单独的文件,或者你的分类逻辑更复杂(多个分类共享同一个模板),可以使用这种方法。

(图片来源网络,侵删)
工作原理
WordPress 有一个主模板文件 category.php,它负责处理所有分类归档页面,我们可以在这个文件中使用 is_category() 条件标签来判断当前正在显示的是哪个分类,然后根据判断结果加载不同的布局或内容。
操作步骤
-
打开或创建
category.php文件- 在你的主题文件夹中,找到
category.php文件,如果不存在,就复制archive.php并重命名为category.php。
- 在你的主题文件夹中,找到
-
使用条件标签进行判断
- 在
category.php文件中,使用is_category()函数,它可以接受分类 ID、别名或名称作为参数。 - 在
if语句中,编写对应分类的专属 HTML 和 PHP 代码。
- 在
-
添加
else或其他条件- 你可以使用
else来为不满足条件的分类(即所有其他分类)提供一个默认布局。
- 你可以使用
示例代码:
<?php
/**
* Template Name: 分类归档页
*/
get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
// 检查是否是 "news" 分类 (通过别名)
if ( is_category( 'news' ) ) {
?>
<h1 class="page-title">新闻资讯</h1>
<div class="news-grid">
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<article class="news-item">
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php echo wp_trim_words( get_the_excerpt(), 20 ); ?></p>
<a href="<?php the_permalink(); ?>" class="read-more">阅读更多</a>
</article>
<?php endwhile; ?>
<?php endif; ?>
</div>
<?php
}
// 检查是否是 "products" 分类 (通过ID)
elseif ( is_category( 7 ) ) { // 假设产品分类的ID是7
?>
<h1 class="page-title">我们的产品</h1>
<div class="product-showcase">
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<div class="product-card">
<?php if ( has_post_thumbnail() ) : ?>
<a href="<?php the_permalink(); ?>"><?php the_post_thumbnail( 'medium' ); ?></a>
<?php endif; ?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php the_content(); ?>
</div>
<?php endwhile; ?>
<?php endif; ?>
</div>
<?php
}
// 如果以上条件都不满足,则显示默认布局
else {
?>
<h1 class="page-title"><?php single_cat_title(); ?></h1>
<?php
// 显示分类描述
$category_description = category_description();
if ( ! empty( $category_description ) ) :
echo '<div class="taxonomy-description">' . $category_description . '</div>';
endif;
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// 使用标准的文章循环
get_template_part( 'template-parts/content', get_post_format() );
endwhile;
the_posts_pagination();
else :
get_template_part( 'template-parts/content', 'none' );
endif;
?>
<?php
}
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php
get_sidebar();
get_footer();
优点:
- 灵活性高,可以在一个文件内处理多种分类逻辑。
- 适合需要根据分类显示不同内容块(在列表上方添加一个特定的广告位或介绍模块)的场景。
缺点:
- 如果分类很多,
category.php文件会变得非常臃肿和难以维护。
使用插件 (最简单,适合初学者)
如果你不想写代码,或者对文件操作感到不放心,可以使用插件来实现。
推荐插件
- Category Page Templates: 这个插件允许你为任何分类分配一个页面模板,你可以在后台像编辑页面一样,为每个分类选择一个自定义模板。
操作步骤
- 在 WordPress 后台「插件」>「安装插件」,搜索 "Category Page Templates"。
- 安装并激活插件。
- 进入「文章」>「分类目录」,编辑一个分类。
- 在分类编辑页面的下方,你会看到一个「页面模板」的下拉菜单,在这里选择你想要应用的模板(通常是主题中已有的页面模板,或者插件生成的模板)。
- 保存即可。
优点:
- 完全可视化操作,无需代码。
- 安装即用,非常方便。
缺点:
- 增加了一个插件,可能会对网站性能有微弱影响。
- 功能不如前两种方法强大和灵活。
总结与选择建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
category-{slug}.php |
最佳实践、简单、高效、原生支持 | 需要创建多个文件,每个分类一个文件 | 强烈推荐,适用于绝大多数需要不同分类布局的情况。 |
category.php + 条件标签 |
灵活、可在一个文件内管理复杂逻辑 | 文件可能臃肿,代码稍复杂 | 适用于少数几个分类有特殊需求,或需要在一个页面上根据分类动态显示不同内容模块的情况。 |
| 使用插件 | 无需代码,可视化操作,极其简单 | 增加插件依赖,灵活性受限 | 适合初学者,或者只是临时需要为某个分类设置不同布局,不想动代码的情况。 |
对于绝大多数 WordPress 用户和开发者来说,方法一 (category-{slug}.php) 是最理想的选择,它既简单又强大,完全符合 WordPress 的设计哲学,是解决这个问题的标准答案。
