WordPress 文章类型详解:从入门到实践
在 WordPress 中,内容不仅仅是“文章”和“页面”。系统内部把所有内容都统称为“文章类型”(Post Types),这个术语容易让新手困惑——因为“文章”(Post)本身也是其中一种类型。实际上,无论是博客文章、页面、附件图片,还是导航菜单,它们都存储在同一个数据库表 wp_posts 中,通过 post_type 字段加以区分。理解文章类型是主题开发的基石,因为它决定了哪些模板文件会被用来展示内容。本文将基于官方经典主题文档,用通俗的语言拆解默认文章类型、自定义文章类型及其对应的模板层级,帮助你快速掌握 WordPress 的内容组织逻辑,并为后续的主题开发打下扎实基础。
一、什么是文章类型?
WordPress 中所有内容——文章、页面、图片附件、菜单项等——都存放在数据库的 wp_posts 表里。为了区分它们,系统用一个叫 post_type 的字段做标记。你可以把 wp_posts 表想象成一个大的仓库,里面堆满了各种货物(内容),而 post_type 就是贴在货物上的分类标签。
文章类型的目的:将内容按性质归类,以便系统调用对应的模板文件来呈现。比如,一篇博客文章会用 single.php,而一个页面会用 page.php。这种机制让你可以针对不同内容设计不同的样式和布局。
二、默认文章类型
WordPress 内置了七种默认文章类型,它们在安装后即可使用:
| 内部名称 | 中文名称 | 简要说明 |
|---|---|---|
post | 文章 | 博客动态内容,按时间倒序排列 |
page | 页面 | 静态内容,支持层级结构 |
attachment | 附件 | 上传的图片、文档等媒体文件 |
revision | 修订版本 | 自动保存的内容历史版本 |
nav_menu_item | 导航菜单项 | 菜单中的每个链接条目 |
wp_template | 区块模板 | 站点编辑器使用的整站模板 |
wp_template_part | 模板部件 | 可复用的模板组成部分 |
注意:前三种(post、page、attachment)是你日常打交道多的,后几种由系统内部使用。虽然插件或主题可以修改甚至移除这些类型,但不建议在分发的主题中这么做,以免破坏网站后台的正常功能。
三、文章(Post)
文章是博客的核心内容类型,具备以下特征:
- 按发布时间倒序排列,新文章排在前面
- 带有日期和时间戳
- 默认支持分类目录和标签两种分类方式
- 会出现在网站的 Feed 订阅 中
相关模板文件(按优先级从高到低):
text
single.php → single-post.php
category.php → category-{slug}.php
tag.php → tag-{slug}.php
taxonomy.php → taxonomy-{taxonomy}.php
archive.php → archive-{post-type}.php
author.php → author-{id}.php
date.php
search.php
home.php
index.php
实际开发中,如果你只想为“文章”类型定制单页模板,可以创建 single-post.php;如果所有单页共用,则直接使用 single.php。
四、页面(Page)
页面用于静态内容,比如“关于我们”、“联系我们”。它的特点:
- 无时间戳,不参与博客时间流
- 不使用分类和标签
- 支持层级结构,可以设置父级页面和子级页面
php
// 获取页面层级关系的示例
$pages = get_pages( array(
'parent' => 0, // 只获取页面
'sort_column' => 'menu_order'
) );
foreach ( $pages as $page ) {
echo '<a href="' . get_permalink( $page->ID ) . '">' . $page->post_title . '</a>';
}
相关模板文件:
text
page.php → page-{slug}.php → page-{id}.php
front-page.php(站点首页)
search.php
index.php
注意:如果你设置了静态首页,front-page.php 的优先级会高于 page.php。
五、附件(Attachment)
附件是上传到媒体库的文件。对于图片,系统还会在 wp_postmeta 表中存储尺寸、缩略图等额外元数据。
附件页是独立的页面,当用户直接访问图片附件 URL(如 https://你的域名/?attachment_id=123)时触发。默认情况下,附件页会显示图片及其描述。
相关模板文件(按优先级):
text
attachment-{MIME类型}.php(如 attachment-image.php)
attachment.php
single-attachment.php
single.php
index.php
如果你想彻底关闭附件页,可以用插件或代码实现,但要注意这会影响到已有链接的访问。
六、自定义文章类型
自定义文章类型让你可以创建自己的内容种类,比如“产品”、“案例”、“书籍”等。关键原则:自定义文章类型的注册逻辑应该放在插件中,而不是主题里。这样即使更换主题,数据也不会丢失。
php
// 注册自定义文章类型 "book" 的示例(应放在插件中)
function create_book_post_type() {
register_post_type( 'book',
array(
'labels' => array(
'name' => '书籍',
'singular_name' => '书籍',
),
'public' => true,
'has_archive' => true,
'supports' => array( 'title', 'editor', 'thumbnail' ),
)
);
}
add_action( 'init', 'create_book_post_type' );
虽然注册由插件完成,但展示工作依然在主题层面。主题开发者需要为自定义文章类型准备对应的模板:
text
single-{post_type}.php(如 single-book.php)
archive-{post_type}.php(如 archive-book.php)
search.php
index.php
总结
| 文章类型 | 存储表 | 区分字段 | 典型用途 | 常用模板 |
|---|---|---|---|---|
| 文章 | wp_posts | post_type='post' | 博客动态 | single.php, archive.php |
| 页面 | wp_posts | post_type='page' | 静态内容 | page.php, front-page.php |
| 附件 | wp_posts | post_type='attachment' | 媒体文件 | attachment.php |
| 自定义类型 | wp_posts | post_type='自定义' | 业务内容 | single-{type}.php |
理解文章类型的核心在于:所有内容共用一个数据表,通过 post_type 字段区分,再通过模板层级决定展示方式。在实际开发中,先用插件注册自定义类型,再在主题中创建对应的模板文件,这是标准的开发流程。掌握这些,你就能驾驭 WordPress 的内容组织逻辑,为后续的模板开发和数据查询打下坚实基础。