Структура базы данных WordPress
Написать эту статью меня подвигло письмо одного из моих читателей.
Начнем с азов: WordPress, как и большинство современных систем управления контентом, использует базу данных MySQL. Вся информация хранится в ней – настройки блога, записи, комментарии, ссылки, информация о пользователях и т.д.
Для управления или изменения базы данных используется программа PHP_My_Admin, которая есть в наличии на любом сервере.
Хочется также отметить, что некоторые плагины также создают свои таблицы в базе данных и не всегда при удалении плагина эти таблицы уничтожаются.
Еще один совет новичкам: не забывайте делать бэкап базы данных, иначе вы рискуете потерять свой блог. Не обязательно это делать вручную - есть неплохой плагин wp-db-backup, который по составленному вами расписанию пришлет бэкап БД вам на почту.
Итак, данные блога WordPress (2.8.x) хранятся в десяти таблицах. БД WordPress 2.9.x по дефолту содержит уже 11 таблиц (+ wp_commentmeta).
| Имя таблицы | Описание |
|---|---|
| posts | Основная таблица в базе. Здесь хранятся все статьи (заголовок, содержимое) и их служебная информация (дата создания, автор, тип и т.д.). |
| postmeta | Дополнительные данные к статье, которые не попадают в стандартные поля таблицы posts. |
| users | Данные о пользователях: как об авторах статей, так и о пользователях с возможностью их комментирования |
| usermeta | Дополнительные поля для описания пользователей, дополнение к таблице users. |
| comments | Здесь хранятся все комментарии для всех статей. |
| terms | Простой список рубрик, к которым статья может относиться. Немного служебной информации о рубриках. |
| term_taxonomy | В этой таблице рубрики систематизируются, то есть она служит для создания дерева рубрик. |
| term_relationships | Здесь задаётся соответствие статьи и рубрики (вернее, элементу дерева рубрик из таблицы term_taxonomy), к которой статья относится. |
| links | Ссылки и вся по ним информация. |
| options | Общие настройки движка WordPress. |
Остановимся на каждой из таблиц подробнее.
posts
Все страницы, аттачменты, записи хранятся в таблице wp_posts. Точнее, аттачменты хранятся в файловом виде на диске, но мета информация хранится в wp_posts.
Записи, страницы и аттачменты могут быть похожи друг на друга, но все имеют уникальный ID, который создается автоматически.
| Поле | Описание |
|---|---|
| ID | Идентификатор записи, он же первичный ключ. Значения – от 1 до 263-1. Максимальное значение ячейки записывается 20-разрядным числом. |
| post_author | Автор статьи, который задаётся идентификатором ID таблицы users. |
| post_date | Дата публикации, время – местное. |
| post_date_gmt | Дата публикации, время – по гринвичу. |
| post_content | Содержимое статьи. При сохранении и выводе на страницу это содержимое проходит через вордпрессовский фильтр замен, именно поэтому часто на экране можно увидеть совсем не то, что мы вводили. |
| post_title | Заголовок статьи или имя для изображения в библиотеке медиафайлов (да-да, изображения, вернее ссылки на них, тоже хранятся в этой таблице). Интересно, хоть кто-то придумал заголовок максимальной длины, в 65535 символов? |
| post_category | Всегда равен 0. |
| post_excerpt | Краткая выдержка, информация о записи (цитата). Надо вводить самостоятельно, по умолчанию отсутствует. |
| post_status | Статус записи. Лично я встретил такие: publish – опубликованная, draft – черновик, inherit – связанная (например, изображение или резервная копия записи). |
| comment_status | Включена ли возможность комментирования. open – можно комментировать, closed – нельзя. |
| ping_status | Разрешены ли обратные ссылки и уведомления. Значения – open и closed |
| post_password | Пароль в явном виде, если статья запаролирована. В противном случае – нет значения. |
| post_name | Имя страницы для статичной ссылки. Записи автосохранения и изменения задают это имя автоматом. |
| to_ping | |
| pinged | |
| post_modified | Дата последнего изменения. |
| post_modified_gmt | То же самое – по гринвичу. |
| post_content_filtered | |
| post_parent | Для резервных копий и изображений – ID родительской записи. |
| guid | Полная интернет-ссылка на запись (объект). Здесь вордпресс проявляет всю свою фантазию. На «статические» страницы даёт php-запрос типа ..?page_id=N, на автосейвы – с датой в URL-е, и т.д. |
| menu_order | Равен 0. |
| post_type | Тип записи: post – обычная запись, page – запись с постоянной ссылкой (статичная), revision – автосохранение, attachment – медиафайл (например, изображение). |
| post_mime_type | Якобы тип содержимого записи. Важен и нужен только для прикреплений (например, png-изображение проходит как image/png). |
| comment_count | Количество комментов к записи. |
postmeta
Много вещей, которые Вы хотите проассоциировать со своим постом: название фильма, местоположение, информацию для поисковиков, и т.д. хранятся в таблице wp_postmeta.
| Поле | Описание |
|---|---|
| meta_id | Первичный ключ. |
| post_id | К какой записи таблицы posts относятся наши метаданные. |
| meta_key | Имя дополнительного параметра. Часто используется для прикреплений файлов и других метаданных к статье. |
| meta_value | Значение дополнительного параметра. Содержимое зависит от имени параметра. |
WordPress сохраняет в эту таблицу дополнительные данные об аттачментах, которые не могут быть сохранены в wp_posts. Таблица используется движком довольно часто - будьте внимательны и осторожны при внесении изменений!
users
WordPress использует эту таблицу для хранения информации о зарегистрированных пользователях. В ней содержатся ID пользователей, их логин, зашифрованный пароль, полное имя, дата регистрации, и многое другое.
| Поле | Описание |
|---|---|
| ID | Идентификатор, первичный ключ. |
| user_login | Имя пользователя для входа. |
| user_pass | Пароль пользователя для входа, в зашифрованном виде. |
| user_nicename | Как обращаться к пользователю. Как правило, совпадает с именем для входа. |
| user_email | Электропочта для связи. |
| user_url | Адрес сайта пользователя. Именно благодаря этому очень нужному полю, блоги на вордпрессе с настройками по умолчанию потихоньку обрастают спамом. |
| user_registered | Дата регистрации пользователя. |
| user_activation_key | Активационный ключ, рандомный. После активации удаляется. |
| user_status | |
| display_name | Имя для отображения. |
usermeta
Для пользователей таблица wp_usermeta является тем же самым, чем является wp_postmeta для записей (контента). В ней содержится вся дополнительная информация о пользователях - персональные настройки (вкл./выкл. визуальный редактор, день рождения, контактная информация и т.п.).
| Поле | Описание |
|---|---|
| umeta_id | Идентификатор метазаписи, первичный ключ. |
| user_id | Идентификатор пользователя, к которому имеет отношение запись. |
| meta_key | Дополнительный параметр. Вот здесь – внимание! Дополнительными параметрами считаются: nickname – как пользователь отображается в системе, first_name – реальное имя пользователя, description – описание. И многое другое, что можно было бы использовать в таблице users. |
| meta_value | Значение дополнительного параметра. |
comments
В таблице wp_comments хранятся все комментарии к записям на вашем сайте, включая подтвержденные, ожидающие модерации, спам, трэкбэки, пингбэки, посланные Вам с других сайтов.
| Поле | Описание |
|---|---|
| comment_ID | Идентификатор комментария, первичный ключ. |
| comment_post_ID | Идентификатор заметки, к которой относится комментарий. |
| comment_author | Автор, берётся из регистрационных данных или вводится вручную, если регистрация для комментариев не требуется. |
| comment_author_email | Электропочта. |
| comment_author_url | Сайт автора комментария. |
| comment_author_IP | IP-адрес прокомментировавшего. |
| comment_date | Дата и время. |
| comment_date_gmt | Дата и время – по гринвичу. |
| comment_content | Сам комментарий. |
| comment_karma | |
| comment_approved | Одобрен ли комментарий для показа. |
| comment_agent | С какого браузера и системы заходили. |
| comment_type | |
| comment_parent | Родительский коммент. Нужен для древовидной структуры. |
| user_id | Идентификатор зарегистрированного пользователя. |
commentmeta
Используется начиная с версии 2.9. Содержит дополнительные параметры для комментариев. Автоматическое обновление с 2.8.6 до 2.9.х иногда может привести к ошибке, связанной с этой таблицей.
terms
Описание рубрик.
| Поле | Описание |
|---|---|
| term_id | Идентификатор. |
| name | Название рубрики. Название используется для определения рубрики практически везде, например, под записью или в виджете рубрик. |
| slug | Ярлык рубрики. «Ярлык» — это вариант названия, подходящий для URL. Обычно содержит только латинские буквы в нижнем регистре, цифры и дефисы. |
| term_group |
term_taxonomy
Таблица для объединения рубрик в деревья и для описания взаимосвязей рубрик.
| Поле | Описание |
|---|---|
| term_taxonomy_id | Идентификатор, первичный ключ. |
| term_id | Идентификатор рубрики. |
| taxonomy | category – рубрика, link_category – рубрика ссылок. |
| description | Краткое описание. |
| parent | Идентификатор родительской рубрики. |
| count | Количество ассоциированных записей. |
term_relationships
Таблица для связи статьи с рубриками.
| Поле | Описание |
|---|---|
| object_id | Какой объект описываем. |
| term_taxonomy_id | С какой связью рубрик ассоциируем. |
| term_order |
links
Обычно таблица wp_links используется для хранения блогролла, списка ссылок на другие сайты или блоги. Настроек для блогролла огромное количество, поэтому подробно рассматривать эту таблицу мы не будем.
options
Общие настройки движка WordPress.
Данные в этой таблице не связаны с данными из других таблиц и служат для настройки блога в целом. Описывать столбцы подробно нет смысла - их в таблице около 150-и.
В заключение, хотелось бы поблагодарить авторов сайтов, чья информация была использована в этой статье:
Злобного Админа; блог Press WordPress; блог WordPress Thems&Plugins, блог WP-Info.
Информация из Codex на английском.

















10 комментариев к “Структура базы данных WordPress”