wordpress自定义文章类型(cpt)数据统一存于wp_posts表中,通过post_type字段区分类型;自定义分类法数据分散在wp_terms、wp_term_taxonomy和wp_term_relationships三张系统表中,不存在独立命名的cpt或分类表。
wordpress自定义文章类型不对应独立数据表
wordpress自定义文章类型(cpt)的数据全部存放在 wp_posts 表里,不是单独建表。你搜 pdf、product 或任何自定义类型名,肯定找不到对应表名——因为根本不存在。
它靠 post_type 字段区分:每条记录的 post_type 值是 post、page,还是你注册的 pdf 或 course。所有 CPT 内容都挤在一张表里,只是用这个字段打标签。
- 查某个 CPT 的全部文章:
SELECT * FROM wp_posts WHERE post_type = 'pdf' AND post_status = 'publish'; -
post_type值必须完全匹配,大小写敏感(比如Pdf≠pdf) - 别漏加
post_status条件,否则会捞出大量draft、auto-draft、revision记录 - 如果表前缀不是
wp_(比如是abc_),记得把wp_posts换成abc_posts
自定义分类法(Taxonomy)也不在独立表里
和 CPT 类似,自定义分类法(比如 pdf_cat)的数据分散在三张系统表中:wp_terms(存分类名称)、wp_term_taxonomy(存分类类型和归属关系)、wp_term_relationships(存文章与分类的关联)。你不会看到 pdf_cat 这样的表名。
想查某篇文章属于哪些自定义分类,得连表查:
SELECT t.name, tt.taxonomy FROM wp_terms t JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id JOIN wp_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE tr.object_id = 123 AND tt.taxonomy = 'pdf_cat';
-
object_id是文章在wp_posts表里的ID -
tt.taxonomy必须填你注册时用的准确 slug(如pdf_cat),不能填中文名或显示名 - 如果结果为空,说明这篇文章没被分配到该分类,或分类本身没注册成功
为什么有人以为该有独立表?
常见误解来源有两个:一是看到插件或主题文档里说“为 product 类型添加 brand 分类”,误以为要建 product 表;二是导出数据库时发现 wp_posts 膨胀巨大,怀疑“是不是该拆表”。
但 WordPress 的设计就是单表多类型 + 多表关联分类。强行拆表不仅破坏兼容性,还会让 WP_Query、REST API、后台列表等全部失效。
真正需要关注的是 wp_posts 表体积和索引。如果 CPT 数据量超 50 万行,post_type 和 post_status 字段没索引,查询就会明显变慢——这时该加复合索引,而不是造新表。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











