База данных WordPress изнутри

База данных WordPress изнутри
WordPress, как и большинство других современных систем управления контентом, активно использует базу данных. Вся информация хранится в ней – настройки блога, записи, комментарии, ссылки, информация о пользователях и т.д. Поэтому необходимо понимать, как база организована, какие типы данных в ней хранятся, и как разные вещи взаимодействуют друг с другом.

Перед тем, как мы займёмся детальным изучением структуры базы, я хочу обратить Ваше внимание на три следующих момента:

1. WordPress API предоставляет некоторые возможности для управления данными без прямого обращения к базе. Поэтому, с технической стороны, Вам не нужно знать, как база данных организована. Но если Вы имеете об этом представление, возможно, Вы найдёте решения, которые будут более быстрыми и эффективными для достижения поставленной цели.

2. Структура базы данных WordPress проста и удобна. Бояться нечего. Она состоит всего из 10 таблиц с несколькими полями в каждой. После беглого ознакомления структура останется в Вашей памяти.

3. Структура базы данных WordPress хорошо документирована.

wp_posts

WordPress используется в основном как система управления контентом (CMS). Поэтому, на мой взгляд, таблица с контентом имеет основное значение. Страницы, записи, аттачменты, все это – контент, всё это WordPress хранит в одной таблице – wp_posts.

В действительности аттачменты хранятся как есть – в виде файлов на диске, но WordPress использует таблицу wp_posts для хранения мета-информации об аттачментах (например ID пользователя, который его загрузил, ID записи, которая ссылается на аттачмент, время загрузки и т.п.).

Страницы, записи и аттачменты могут быть очень похожи друг на друга, а могут сильно отличаться. Сначала мы рассмотрим, что общего между ними. Все три вида контента имеют уникальный идентификатор – ID (обычно создаётся автоматически WordPress'ом или MySQL), автора (человек, который написал запись или загрузил файл), дату, название (заголовок), и описание (даже если это поле пустое, его можно будет заполнить позже). Все три вида имеют URL. Итак, для каждой записи, страницы или аттачмента имеется запись в таблице wp_posts.

Теперь поговорим о различиях между ними. Чтобы отличить один тип контента от другого, в таблице wp_posts существует поле post_type. Для записей его значение – 'post', для страниц – 'page', для аттачментов – 'attachment'.

Сущещствует некоторое количество специальных полей. Например, поле post_mime_type используется для хранения типа файла аттачмента ('image/jpeg' и 'application/pdf'). Поле menu_order содержит порядковый номер отображения страницы в списке. Поле post_parent используется для организации страниц с «подстраницами», а так же для хранения информации о связи аттачмента с записью.

Для того, чтобы понять, как и когда используется то или иное поле, запустите следующие запросы (для каждого типа контента):

* SELECT * FROM wp_posts WHERE post_type = 'post' LIMIT 1
* SELECT * FROM wp_posts WHERE post_type = 'page' LIMIT 1
* SELECT * FROM wp_posts WHERE post_type = 'attachment' LIMIT 1

В этой же таблице находится информация о состоянии записи/страницы. В большинстве случаев Вы увидите 'publish' для опубликованных записей, 'draft' для черновиков, и 'inherit' для аттачментов. С остальными состояниями Вы без проблем разберетесь сами.

Вот несколько примеров того, как может быть использована таблица wp_posts:

* Получение статистики – сколько записей вы всего написали, сколько записей написал тот или иной автор, какое количество записей публикуется в среднем за день и т.д.
* Создать список всех аттачментов.
* Создать галерею картинок для каждой записи (hint: "WHERE post_type = 'attachment' AND (post_mime_type = 'image/jpeg' OR post_mime_type = 'image/gif' OR post_mime_type = 'image/png')").

wp_postmeta

Существует миллион вещей, которые Вы, возможно, захотите проассоциировать со своей записью: Ваше настроение, название песни, которую Вы слушали, географическое местоположение, список ссылок на похожие записи, специфичную информацию для поисковых машин, и т.д. и т.п. Всё это хранится в таблице wp_postmeta.

Структура этой таблицы очень простая и гибкая. Она имеет всего четыре поля: meta_id, post_id, meta_key и meta_value. meta_id создаётся автоматически, и я не вижу ни одной причины, по которой его нужно было бы менять вручную. post_id соответствует ID записи (в таблице wp_posts), о которой эта мета-информация. meta_key – это краткое описание мета-информации, которую Вы хотите добавить к записи (например 'mood' или 'song'). meta_value – это непосредственно значение мета-информации (например «хуевастенько» для 'mood').

WordPress использует эту таблицу для хранения дополнительной информации об аттачментах, которая не может быть сохранена в таблице wp_posts (локальные пути к файлу, информация о превьюшках и т.д.). Также в этой таблице содержатся специфические поля или значения – те, которые вы видите в редакторе. И, конечно, существует огромное количество плагинов, которые используют эту таблицу для своих нужд. Итак, если Вы решили использовать эту таблицу, Вам нужно придумать уникальные имена для Ваших «мета-ключей», в противном случае Ваш плагин может конфликтовать с другими.

wp_users

WordPress использует эту таблицу для хранения информации о зарегистрированных пользователях. В ней содержатся ID пользователей, их логин, зашифрованный пароль, полное имя, дата регистрации, и многое другое.

wp_usermeta

Для пользователей таблица wp_usermeta является тем же самым, чем является wp_postmeta для записей (контента). В ней содержится вся дополнительная информация о пользователях – персональные настройки (вкл./выкл. визуальный редактор, день рождения, контактная информация и т.п.).

wp_comments

В таблице wp_comments хранятся все комментарии к записям на вашем сайте, включая подтвержденные, ожидающие модерации, спам, трэкбэки, пингбэки, посланные Вам с других сайтов. О предназначении полей этой таблицы Вы можете догадаться и сами, но в любом случае, вот их краткое описание:

* comment_ID – уникальный ID для каждого комментария, создаётся автоматически MySQL
* comment_post_ID – уникальный ID записи, к которой комментарий был добавлен
* comment_author – имя автора комментария
* comment_author_email – email автора комментария
* comment_author_url – URL автора комментария
* comment_author_IP – IP-адрес автора комментария
* comment_date – дата и время добавления комментария
* comment_content – текст комментария
* comment_approved – прошёл ли комментарий модерацию и если да, то как
* comment_agent – браузер автора комментария (MSIE, Firefox, Safari и т.д.)
* comment_type – обычный комментария, трэкбэк, пингбэк
* user_id – ID автора, если он зарегистрированный пользователь

Есть еще несколько полей, но они нам вряд ли понадобятся, поэтому мы оставим их описание за кадром.

wp_options

Таблица wp_options содержит все глобальные настройки WordPress. Она довольно похожа на таблицы wp_postmeta и wp_usermeta по структуре, но есть и различия.

В этой таблице есть поле blog_id, но используется оно только в WordPress MU (большая часть кода однопользовательской и многопользовательской инсталляций WordPress совпадают). WordPress MU использует это поле для того, чтобы отличить настройки одного блога от настроек другого.

Поле autoload определяет – загружаются/записываются ли настройки из базы данных/кэша или они доступны только для чтения. Большинство настроек загружаются автоматически.

wp_categories

Таблица wp_categories содержит информацию обо всех категориях, которые Вы создали, это: название и описание категории, ID родительской категории и т.д.

Для ускорения работы WordPress сохраняет некоторую статистику. Например, количество записей и ссылок в категории пересчитывается каждый раз при их добавлении или удалении (поля category_counter и link_count).

wp_post2cat

Связывание записи с категорией осуществляется через таблицу wp_post2cat. Это стандартный подход для связи «многих-со-многими» в реляционных базах данных. wp_post2cat имеет только три поля: уникальный ID (для строки в таблице, создаётся автоматически), уникальный ID записи и ID категории, в которую добавлена запись.

wp_links

Обычно таблица wp_links используется для хранения блогролла, списка ссылок на другие сайты или блоги. Настроек для блогролла огромное количество, поэтому подробно рассматривать эту таблицу мы не будем. Скажу только одно: если Вам вдруг вздумается создать на основе WordPress каталог ссылок, например новый Yahoo!, Вам не придётся много программировать. По сути нужно только будет создать «кустомную» тему.

wp_link2cat

Таблица wp_link2cat практически идентична wp_post2cat, за исключением того, что в ней содержатся ID ссылок вместо ID записей.

P.S. статья старенькая и подходит для базы WordPress до версии 2.3, но я решил ее все таки опубликовать, т.к. общее все рано есть. Может кому пригодиться 😉

Источник, перевод.

Рубрика: Разное | 19 марта 2009

Предыдущие записи из рубрики `Разное`

12 комментариев

vitaly, 03.03.2010 в 03:31

для таблицы wp_posts значение 'inherit' для post_type это не аттачмент, а версия изменения поста или страницы, такая запись ссылается на родителя, который в состоянии 'publish'

ОтветитьОтветить
Александр, 28.06.2011 в 08:37

Скажите пожалуйста, а если база данных по каким либо причинам повредится или "слетит" данные могут утеряться? статьи, комментарии?

ОтветитьОтветить
хирург, 10.08.2011 в 10:48

Благодарю за статью. Но меня тоже волнует вопрос относительно утери данных. Ответьте пожалуйста.

ОтветитьОтветить
Юлия, 01.09.2011 в 12:38

У меня есть блог Miss, я публикую только страницы. Это на чем-то может отразиться, и зачем нужны записи.

ОтветитьОтветить
kama, 02.09.2011 в 22:31

Юлия, неудобно же жутко. Записи сделаны для удобства — записи структурируются по категориям (рубрикам) — это удобно.

ОтветитьОтветить
sgnsn, 17.03.2014 в 19:56

ребят очень много ссылок которые надо менять сайт был на другом домене а сейчас другой есть возможность через базу поменять сразу все!??

ОтветитьОтветить
Гал, 21.09.2014 в 19:12

На каком этапе СОЗДАНИЯ САЙТа устанавливается база данных для wp?
Например, я поставила движок wp на сайт, ну он жеж работает и без БД.
Нигде не описано просто-напросто, для чего вообще нужны БД? Ведь подобные статьи для новичков, поэтому и объяснять надо с самого начала, как для новичков. А те, кого такие вопросы не интересуют, не заходят на такие статьи вообще.

ОтветитьОтветить
Гал, 21.09.2014 в 19:14

сделала сайт-одностраничник, там про БД вообще и не вспомнила, а там она нужна?

ОтветитьОтветить
Гал, 21.09.2014 в 20:25

Может вам мои вопросы покажутся смешными (хотя мне уже самой смешно))) - несколько лет назад пыталась сделать сайт на wp - вроде бы ничего сложного, но бросила и вот помню, что и в тот раз не нашла ответа про БД. Везде: установка БД, а на кокойЛяд она нужна)))???? Ответьте, пожалуйста. Если не хотите публично отвечать, то хотя на мой email. Хотя думаю, что может еще кому-нибудь будет интересно.

ОтветитьОтветить
kama, 11.10.2014 в 16:46

Например, я поставила движок wp на сайт, ну он жеж работает и без БД. Движок работает только с установленной базой данных. Она устанавливается в самом начале!

ОтветитьОтветить
kama, 11.10.2014 в 16:47

Нет, не нужна!

ОтветитьОтветить
kama, 11.10.2014 в 16:48

База данных нужна, чтобы хранить в ней данные! Когда сайт из нескольких страниц БД подключать смысла не имеет. Но WordPress работает только с базой данных, тут не ВП нужен...

ОтветитьОтветить

Комментировать

Новые комментарии