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