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 записей.
Взято с [delete yourself]
Мой блог находят по следующим фразам
- wordpress редактировать комментарии
- вывод постов в обратном порядке
- блоги тут скачать готовые темы
- wordpress календарь
- лучшие темы wp
- Premium Wordpress Themes
- Free Wordpress Theme - SimplyText
- Новая легкая и светлая Wordpress тема
- Новая дизайнерская тема для Wordpress
- Несколько новык Wordpress тем
- Красочные Wordpress темы от нового автора

Комментарии (26)
Виктор // мая 8, 2008 at 3:50 дп
Попробовал, помогло, спасибо! :)
Admin // мая 9, 2008 at 3:29 дп
Эзотерик // Июн 3, 2008 at 14:11 пп
webalexan // Ноя 29, 2008 at 3:56 дп
yAnTar // Дек 5, 2008 at 11:12 дп
wp_post2cat и wp_link2cat в вордпрессе нет
Admin // Дек 5, 2008 at 11:32 дп
yAnTar // Дек 5, 2008 at 12:19 пп
yAnTar // Дек 5, 2008 at 13:15 пп
Admin // Дек 5, 2008 at 13:26 пп
http://codex.wordpress.org/Database_Description/2.5
yAnTar // Дек 5, 2008 at 13:59 пп
Это я видел, я искал именно графическую интепретацию.
Посидел минут 20 - добавлял посты, категории, теги - сам разобрался полностью.
Gagen // Фев 28, 2009 at 15:02 пп
wp_terms
wp_term_relationships
wp_term_taxonomy
Admin // Мар 1, 2009 at 4:39 дп
serg // Апр 23, 2009 at 7:01 дп
Ищу плагин для автоматического удаления старых постов через определенное время после их публикования скажем через месяц. Может кто-то видел такой?
Admin // Апр 23, 2009 at 7:46 дп
serg // Апр 23, 2009 at 18:11 пп
Буду смотреть.
serg // Апр 24, 2009 at 6:08 дп
еще раз спасибо!
serg // Апр 24, 2009 at 11:16 дп
http://wp-skins.info/goto/com-rus.com ? Вообще что это дает?
Admin // Апр 24, 2009 at 11:56 дп
Плагин можно скачать тут: http://jehy.ru/wp-plugins.en.html
Diplomat // Июн 2, 2009 at 15:14 пп
illusions // Июн 2, 2009 at 15:26 пп
$content = str_replace('site1.com', 'site2.com', $content)
Или если там сложнее - то тогда регулярные выражения.
Admin // Июн 2, 2009 at 15:32 пп
Он привязывается через урл к плагинам, блогу и т.п.
Так что там завязка сильная, я недавно сайт с одного домена на другой переносил - запарился в БД урлы менять.
Diplomat // Июн 2, 2009 at 15:55 пп
Admin // Июн 2, 2009 at 16:24 пп
http://mcaleavy.org/code/domain-mirror/
http://lightpainting.org/code/domain-mirror/
Только объясните мне, зачем это нужно ?
Diplomat // Июн 2, 2009 at 16:30 пп
Admin // Июн 2, 2009 at 16:40 пп
Сейчас, имхо, при индексации поисковикам все равно в какой зоне у Вас сайт.
Жизнь-Путешествие // Июн 24, 2010 at 1:46 дп
Блог на вордпрессе. Была страница с адресом http:/site.ru/111/post
Поменял название категорию и стал адрес http:/site.ru/222/post
Старый адрес в индексе, а новый нет. Причем если зайти по старому адресу то страница открывается, как будто она есть.
Отсюда вопросы
1. Это вордпресс где-то у себя хранит старые адреса страниц и поэтому они существуют? Если да, то как можно почистить.
2. Как новую страницу загнать в индекс, а старую убрать?
Буду признателен, если Вы оставите
упоминание об этом блоге у себя на сайте.
Оставить комментарий