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参数

相关推荐
格林威2 小时前
面阵相机 vs 线阵相机:堡盟与大恒相机选型差异全解析 附C++ 实战演示
开发语言·c++·人工智能·数码相机·计算机视觉·视觉检测·工业相机
xyq20242 小时前
相邻节点迭代器
开发语言
YSF2017_32 小时前
C语言15-makefile(2)——makefile的自定义变量及两个函数
c语言·开发语言
YaBingSec2 小时前
玄机靶场—Apache-druid(CVE-2021-25646) WP
java·开发语言·笔记·安全·php·apache
少控科技2 小时前
小数典应用:农场环境数据采集监控
开发语言·windows·c#
烟雨孤舟2 小时前
Django 后端项目企业级开发规范文档
后端·python·django
叶小鸡2 小时前
Java 篇-项目实战-天机学堂(从0到1)-day7
java·开发语言
原来是猿2 小时前
Linux线程同步与互斥(五):线程池的全面实现
linux·服务器·开发语言
IT_陈寒2 小时前
Vite开发爽是爽,但这个动态导入坑差点让我崩溃
前端·人工智能·后端