WordPress archive.php 分类与归档页面开发指南

一、archive.php 核心认知:页面定位与作用

1.1 archive.php 的核心功能的定义

archive.php 是 WordPress 模板体系中的归档页面通用模板,核心作用是展示某一类聚合性文章列表,而非单篇文章或首页内容。它会自动匹配「分类目录、标签、日期、作者、自定义分类法」等归档类型的页面请求,统一渲染对应内容的文章列表。

简单来说:用户点击分类链接、标签链接、按年月查看文章时,WordPress 会优先加载 archive.php 展示内容。

1.2 归档页面与分类页面的关联及区别

关联:分类页面是归档页面的子集,WordPress 会将分类页面归为归档类型,默认共用 archive.php 模板。

区别:

归档页面:广义概念,包含分类、标签、日期、作者、自定义分类法等所有聚合页面;

分类页面:狭义概念,仅指「分类目录」对应的文章列表页面,可通过 category.php 单独定制(优先级高于 archive.php)。

1.3 archive.php 在 WordPress 模板层级中的位置

自定义分类模板 → 分类模板(category.php) → 标签模板(tag.php) → 日期模板(date.php) → archive.php → index.php

这意味着:如果主题没有单独的 category.php/tag.php,所有归档类型都会自动使用 archive.php 渲染,是主题开发的「通用兜底模板」。

二、模板优先级测试

2.1 模板预设

category.php里面写1,tag.php里面写2,date.php里面写3,archive.php里面写4

2.2实验访问,分别访问分类页、tag页、日期页看加载的模板

2.3 结果分类页category.php>archive.php,tag页tag.php>archive.php,日期页date.php>archive.php

三、archive.php 基础结构开发

3.1 模板文件创建与基础代码框架

<?php

/**

* 归档页面模板

* Template Name: 归档页面

*/

get_header(); // 加载头部

?>

<!-- 中间内容区域 -->

<div id="archive-content" class="container">

<?php

// 1. 展示归档标题

the_archive_title('<h1 class="archive-title">', '</h1>');

// 2. 展示归档描述

the_archive_description('<div class="archive-desc">', '</div>');

?>

<?php if (have_posts()) : ?>

<!-- 文章循环区域 -->

<div class="archive-post-list">

<?php while (have_posts()) : the_post(); ?>

<!-- 单篇文章内容 -->

<article class="archive-post-item">

<h2 class="post-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>

<div class="post-meta">

<span>发布时间:<?php the_time('Y-m-d'); ?></span>

<span>作者:<?php the_author(); ?></span>

</div>

<div class="post-excerpt"><?php the_excerpt(); ?></div>

</article>

<?php endwhile; ?>

</div>

<!-- 分页区域 -->

<?php the_posts_navigation(); ?>

<?php else : ?>

<!-- 无文章提示 -->

<div class="no-posts">暂无相关文章</div>

<?php endif; ?>

</div>

<?php get_sidebar(); // 加载侧边栏(可选) ?>

<?php get_footer(); // 加载底部 ?>

3.2 调用 WordPress 核心函数(查询、循环、分页)

开发 archive.php 必须掌握 3 个核心函数,无需自定义 SQL 查询:

have_posts():判断当前归档是否有文章;

the_post():初始化文章数据,配合循环使用;

the_posts_navigation():默认上一页 / 下一页分页(后续可优化为数字分页)。

四、分类归档页面核心功能实现

4.1 分类列表展示

$categories = get_categories(array(

'hide_empty' => 1,

'orderby' => 'count',

'order' => 'DESC'

));

可以获取到分类列表,可以做分类筛选

4.2 文章列表循环渲染(标题、摘要、日期、作者等信息)

列表中标题:the_title();

摘要:the_excerpt(),有时候the_excerpt的自带样式不能满足需要,可以用get_post(get_the_ID())->post_excerpt获取

日期:the_time()

作者:the_author();

五、日期/标签/自定义归档页面开发

5.1 日期归档

Is_date()函数是日期页面的判断函数

<?php if (is_date()) : ?>

<div class="date-archive-title">

<?php if (is_year()) : ?>

<h1><?php the_time('Y年'); ?> 年所有文章</h1>

<?php elseif (is_month()) : ?>

<h1><?php the_time('Y年m月'); ?> 所有文章</h1>

<?php elseif (is_day()) : ?>

<h1><?php the_time('Y年m月d日'); ?> 所有文章</h1>

<?php endif; ?>

</div>

<?php endif; ?>

5.2 自定义分类法(Custom Taxonomy)归档适配

<?php if (is_tax()) : ?>

<div class="tax-archive-header">

<h1><?php single_term_title(); ?></h1>

<div class="tax-desc"><?php echo term_description(); ?></div>

</div>

<?php endif; ?>

is_tax()函数是自定义分类法的判断函数

六、功能进阶:个性化与交互优化

6.1 文章分页功能(数字分页、加载更多)

global $wp_query;

$big = 999999999;

echo paginate_links(array(

'base' => str_replace(big, '%#%', esc_url(get_pagenum_link(big))),

'format' => '?paged=%#%',

'current' => max(1, get_query_var('paged')),

'total' => $wp_query->max_num_pages,

'prev_text' => '上一页',

'next_text' => '下一页'

));

数字分页

加载更多是通过获取数字分页的下一页的html,通过js加载到当前页面

自定义分页,wordpress有get_posts()等函数可以自定义文章列表来实现分页

6.2 搜索框与筛选功能集成

get_search_form()是获取搜索的表格,一般是form表格传递s参数

相关推荐
Chester_19999 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
2601_9620559710 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
EXI-小洲10 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员11 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导11 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan11 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
m0_6952514911 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
Lost of 程序猿11 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
大衛說12 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
QQ_216962909612 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端