Написать эту статью меня подвигло письмо одного из моих читателей.
Начнем с азов: 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. |
Остановимся на каждой из таблиц подробнее.
Все страницы, аттачменты, записи хранятся в таблице 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 | Количество комментов к записи. |
Много вещей, которые Вы хотите проассоциировать со своим постом: название фильма, местоположение, информацию для поисковиков, и т.д. хранятся в таблице wp_postmeta.
| Поле | Описание |
|---|---|
| meta_id | Первичный ключ. |
| post_id | К какой записи таблицы posts относятся наши метаданные. |
| meta_key | Имя дополнительного параметра. Часто используется для прикреплений файлов и других метаданных к статье. |
| meta_value | Значение дополнительного параметра. Содержимое зависит от имени параметра. |
WordPress сохраняет в эту таблицу дополнительные данные об аттачментах, которые не могут быть сохранены в wp_posts. Таблица используется движком довольно часто — будьте внимательны и осторожны при внесении изменений!
WordPress использует эту таблицу для хранения информации о зарегистрированных пользователях. В ней содержатся ID пользователей, их логин, зашифрованный пароль, полное имя, дата регистрации, и многое другое.
| Поле | Описание |
|---|---|
| ID | Идентификатор, первичный ключ. |
| user_login | Имя пользователя для входа. |
| user_pass | Пароль пользователя для входа, в зашифрованном виде. |
| user_nicename | Как обращаться к пользователю. Как правило, совпадает с именем для входа. |
| user_email | Электропочта для связи. |
| user_url | Адрес сайта пользователя. Именно благодаря этому очень нужному полю, блоги на вордпрессе с настройками по умолчанию потихоньку обрастают спамом. |
| user_registered | Дата регистрации пользователя. |
| user_activation_key | Активационный ключ, рандомный. После активации удаляется. |
| user_status | |
| display_name | Имя для отображения. |
Для пользователей таблица wp_usermeta является тем же самым, чем является wp_postmeta для записей (контента). В ней содержится вся дополнительная информация о пользователях — персональные настройки (вкл./выкл. визуальный редактор, день рождения, контактная информация и т.п.).
| Поле | Описание |
|---|---|
| umeta_id | Идентификатор метазаписи, первичный ключ. |
| user_id | Идентификатор пользователя, к которому имеет отношение запись. |
| meta_key | Дополнительный параметр. Вот здесь – внимание! Дополнительными параметрами считаются: nickname – как пользователь отображается в системе, first_name – реальное имя пользователя, description – описание. И многое другое, что можно было бы использовать в таблице users. |
| meta_value | Значение дополнительного параметра. |
В таблице 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 | Идентификатор зарегистрированного пользователя. |
Используется начиная с версии 2.9. Содержит дополнительные параметры для комментариев. Автоматическое обновление с 2.8.6 до 2.9.х иногда может привести к ошибке, связанной с этой таблицей.
Описание рубрик.
| Поле | Описание |
|---|---|
| term_id | Идентификатор. |
| name | Название рубрики. Название используется для определения рубрики практически везде, например, под записью или в виджете рубрик. |
| slug | Ярлык рубрики. «Ярлык» — это вариант названия, подходящий для URL. Обычно содержит только латинские буквы в нижнем регистре, цифры и дефисы. |
| term_group |
Таблица для объединения рубрик в деревья и для описания взаимосвязей рубрик.
| Поле | Описание |
|---|---|
| term_taxonomy_id | Идентификатор, первичный ключ. |
| term_id | Идентификатор рубрики. |
| taxonomy | category – рубрика, link_category – рубрика ссылок. |
| description | Краткое описание. |
| parent | Идентификатор родительской рубрики. |
| count | Количество ассоциированных записей. |
Таблица для связи статьи с рубриками.
| Поле | Описание |
|---|---|
| object_id | Какой объект описываем. |
| term_taxonomy_id | С какой связью рубрик ассоциируем. |
| term_order |
Обычно таблица wp_links используется для хранения блогролла, списка ссылок на другие сайты или блоги. Настроек для блогролла огромное количество, поэтому подробно рассматривать эту таблицу мы не будем.
Общие настройки движка WordPress.
Данные в этой таблице не связаны с данными из других таблиц и служат для настройки блога в целом. Описывать столбцы подробно нет смысла — их в таблице около 150-и.
В заключение, хотелось бы поблагодарить авторов сайтов, чья информация была использована в этой статье:
Злобного Админа; блог Press WordPress; блог WordPress Thems&Plugins, блог WP-Info.
Информация из Codex на английском.
Александр, спасибо! Такие комментарии вдохновляют
Хотя я, конечно, в первую очередь поблагодарил бы Злобного Админа, который вручную лопатил эти таблицы.
Кстати- хочу повторить его подвиг
Как думаете — подробный обзор таблицы wp_option будет интересен?
За бедного гусара замолвлю слово... Считаю что подробный обзор таблицы wp_option будет интересен только профессионалам! Нам гусарам (новичкам), желающим внести посильный вклад в виртуальный мозг планеты желательно как младенцам — пищу, разжеваннную другими. Ведь у нас еще нет зубов! К тому же многие из нас (70%) визуалы. Нам лучше 1 раз увидеть (видеоурок). Просим учесть наши пожелания. Успехов вам и вашему прекрасному информационному порталу!
Спасибо за статью. Полезно
спасибо что расписали по пунктам зачем оно и с чем его едят
Отличный обзор! Спасибо за подробное описание темы БД Вордпресс!
Спасибо за обзор.
Хотелось бы увидеть обзор таблицы для нового WordPress 3.0, благо там есть какие-то изменения (ставил бету).
А вообще, думаю, многим пригодилась бы графическая табличка с указанием связей между таблицами
Комментирование закрыто.
10:50
Блестящая статья! Перерыл тонны сайтов, а такого толкового и профессионально поданного материала нигде не нашел! Для меня это оказалось чрезвычайно актуально, поскольку нарабатываю блог на локальном сервере. Отсюда приходится делать его на работе и дома. Все время мучился с переносом данных. А ведь для этого надо было знать где, что и как храниться! И тут неожиданно забрел на блог Николая! Это действительно — удача, очень помогла эта информация. Всем рекомендую!