WordPress 使用 MySQL 数据库,其核心文章数据主要存储在 wp_posts 表中,但与文章相关的信息也分散在其他几个关键表中。
注意: 表前缀 wp_ 是默认的,但可能会因安装时的设置而不同(如 wp123_)。
核心文章表详解 (wp_posts)
这是最重要的表,存储了所有类型的“内容”。不仅仅包括文章(Post),还包括页面、附件、导航菜单项等。
| 字段名 | 类型 | 说明 |
|---|---|---|
| ID | bigint(20) | 主键,文章的唯一ID。我们常说的 $post_id 就是这个值。 |
| post_author | bigint(20) | 作者的用户ID,对应 wp_users.ID。 |
| post_date | datetime | 文章的发布时间。 |
| post_date_gmt | datetime | 格林威治标准时间下的发布时间。 |
| post_content | longtext | 文章正文,即你在编辑器里写的所有内容(HTML/块代码)。 |
| post_title | text | 文章标题。 |
| post_excerpt | text | 文章摘要。 |
| post_status | varchar(20) | 文章状态,如 publish(已发布)、draft(草稿)、pending(待审)、trash(回收站)。 |
| post_type | varchar(20) | 内容类型,如 post(文章)、page(页面)、attachment(附件)、nav_menu_item(菜单项)或你创建的任何自定义文章类型(如 product)。 |
| comment_status | varchar(20) | 评论状态,open 或 closed。 |
| ping_status | varchar(20) | Pingback 和 Trackback 的状态。 |
| post_name | varchar(200) | 文章别名,即 URL 中的 slug(如 hello-world)。 |
| post_modified | datetime | 最后修改时间。 |
| post_parent | bigint(20) | 父文章ID。用于页面层级或附件归属(附件通过此ID归属到某个文章)。 |
| guid | varchar(255) | 全局唯一标识符,通常是文章的完整URL(但安装后可能会固定不变,不建议用于永久链接)。 |
| menu_order | int(11) | 菜单顺序,用于页面和导航菜单项。 |
| comment_count | bigint(20) | 评论总数。 |
其他相关核心表
1. 文章元数据表 (wp_postmeta)
存储文章的额外自定义字段数据。WordPress 的原生自定义字段、高级自定义字段(ACF)插件的数据都存于此。
| 字段名 | 说明 |
|---|---|
| meta_id | 主键。 |
| post_id | 外键,对应 wp_posts.ID。 |
| meta_key | 元数据键(例如:_edit_lock, _thumbnail_id, acf_color)。 |
| meta_value | 元数据值(例如:1678954321:1, 204, #ff0000)。 |
一条文章可以有任意多条元数据记录。
2. 分类与标签相关表(术语表)
这是一个多表关联的系统,用来处理分类目录(Categories)、标签(Tags)和自定义分类法(Taxonomies)。
| 表名 | 说明 |
|---|---|
wp_terms | 存储术语的实际名称(如“WordPress教程”、“科技”)。 |
wp_term_taxonomy | 定义术语属于哪种分类法(如 category, post_tag, product_cat)。一个术语(term)必须属于一个分类法(taxonomy)。 |
wp_term_relationships | 关系表,将文章(object_id)与术语(term_taxonomy_id)关联起来。文章和分类/标签是多对多关系。 |
如何使用这些表?(SQL 查询示例)
1. 查询最新发布的10篇文章
SELECT ID, post_title, post_date FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY post_date DESC LIMIT 10;
2. 查询某篇文章的所有自定义字段(元数据)
SELECT meta_key, meta_value
FROM wp_postmeta
WHERE post_id = 123; -- 将 123 替换为目标文章ID
3. 查询带有“旅行”标签的所有文章
SELECT p.*
FROM wp_posts p
INNER JOIN wp_term_relationships rel ON (p.ID = rel.object_id)
INNER JOIN wp_term_taxonomy tax ON (rel.term_taxonomy_id = tax.term_taxonomy_id)
INNER JOIN wp_terms t ON (tax.term_id = t.term_id)
WHERE tax.taxonomy = 'post_tag'
AND t.slug = 'travel' -- 或使用 t.name = '旅行'
AND p.post_status = 'publish';
总结与最佳实践
不要直接修改数据库:除非你非常清楚自己在做什么,否则永远通过 WordPress 的 API(如
WP_Query,get_post_meta(),wp_set_post_terms())来操作数据。这确保了数据完整性并触发了所有必要的钩子(Hooks)。主要 API:
查询文章:使用
WP_Query操作元数据:使用
get_post_meta(),update_post_meta(),add_post_meta(),delete_post_meta()操作分类术语:使用
wp_get_post_terms(),wp_set_post_terms()性能:直接进行复杂的多表 SQL 查询可能很慢且难以维护。优先使用经过优化的 WordPress API,它们内置了缓存机制。
理解这些表的结构对于进行高级主题开发、编写复杂查询或数据迁移至关重要。
天天下载Ttzip
2026-01-24
非常全,感谢分享
匿名
2025-12-13
大大可以找下哈狗的1030吗,太想要那首歌了~谢谢!
匿名
2025-11-09
https://collaigo.com 免费在线拼图工具
匿名
2025-10-22
盖楼盖楼!
匿名
2025-08-11
沙发沙发
匿名
2025-08-10
https://at.oiik.cn/bing.html