Структура базы данных популярной CMS
Wordpress подробно расписана на
официальном сайте. Здесь и далее в статье рассматривается Wordpress версии 2.5.
В этой статье не буду повторно приводить информацию, и так описанную в официальной документации. Рассмотрим общее назначение таблиц в базе данных и некоторую полезную практическую информацию.
Вот список таблиц Wordpress с описанием их назначения:
|
wp_terms
|
Список всех так называемых терминов. Под терминами подразумевается название рубрик, тегов, категорий ссылок. В этой таблице храниться простой уникальный по имени список таких терминов. В Wordpress один термин может быть как названием рубрики, так и тегом, привязанным в определенному посту.
|
|
wp_term_taxonomy
|
В этой таблице термину ставится в соответствие тип, например, категория (рубрика) или тэг. Один термин может относиться к нескольким типам. Термины одного типа могут быть объединены в иерархическую структуру, таким образом, в этой таблице формируется дерево рубрик. Фактически запись в этой таблице является конкретной рубрикой или тегом.
|
|
wp_posts
|
Основная таблица Wordpress, в ней хранятся посты и страницы, а также их версии (ревизии), если использование версий включено в настройках CMS
|
|
wp_postmeta
|
Дополнительные атрибуты для записи в таблице wp_posts
|
|
wp_term_relationships
|
Связь объекта (поста, страницы, ссылки) с рубрикой или тэгом из таблицы wp_term_taxonomy
|
|
wp_comments
|
Комментарии поста. Комментарии могут быть организованы иерархически. Каждый комментарий содержит полную информацию об авторе.
|
|
wp_links
|
Простой список ссылок. Ссылки могут относиться к тем или иным категориям, связь с категориями осуществляется при помощи таблицы wp_term_relationships
|
|
wp_users
|
Список зарегистрированных пользователей, включая администратора системы admin. Для пользователя определен набор основных атрибутов, одним из которых является хеш пароля.
|
|
wp_usermeta
|
Дополнительные атрибуты пользователя
|
|
wp_options
|
Опции (параметры) базы данных в целом
|
Здесь у таблиц wp_ является префиксом по умолчанию, который может быть другой. Более подробно описывать таблицы не требуется, такое описание есть в официальной документации Wordpress. А мы попробуем решить несколько важных практических задач.
Кстати, когда для установки Wordpress вам потребуется качественный хостинг, рекомендую обратить внимание на
хостинг компании
Beget. Разумные цены при высокой скорости загрузки страниц делают этот хостинг оптимальным для размещения ваших
Wordpress блогов. И что особенно понравилось, практически на всех тарифах вы сможете разместить неограниченное количество блогов. Стоит попробовать этот хостинг, а пока продолжим рассмотрение темы нашей статьи.
Как получить список рубрик
Список категорий (рубрик) мы можем получить при помощи такого запроса:
SELECT t.name,
c.term_taxonomy_id,
c.parent
FROM wp_terms t,
wp_term_taxonomy c
WHERE t.term_id=c.term_id
AND c.taxonomy='category'
Для того, чтобы получить список категорий ссылок, изменим последнее условие таким образом:
AND c.taxonomy='link_category'
Как добавить новую рубрику
Прежде всего надо проверить, существует ли в таблице wp_terms запись с именем новой рубрики. Если есть, запоминаем term_id, если нет, то создаем новую запись, также запоминаем term_id.
Затем создаем новую запись в таблице wp_term_taxonomy, заполнив следующие поля:
- term_taxonomy_id - уникальный идентификатор записи, является идентификатором рубрики
- term_id - id записи из wp_terms
- taxonomy - код, в нашем случае 'category'
Как добавить новый пост
При создании нового поста мы обычно пишем текст поста, описание поста, относим его к рубрике и определяем ключевые слова. Наша задача сделать это, создавая необходимые записи в таблицах базы данных Wordpress.
Если создается новая версия существующего поста, то она просто связывается с основной записью через post_parent, статус такой записи имеет значение 'inherit', все остальные действия производятся одинаково.
В любом случае создаем новую запись в таблице wp_posts, заполняя следующие поля:
- id - уникальный идентификатор. Сделать это можно создав пустую запись и получив затем id новой записи, так как это поле автоинкрементное.
INSERT INTO wp_posts (id) VALUES (NULL);
SELECT last_insert_id() AS id FROM wp_posts;
- guid - URL записи в виде www.foxbase.ru/?p=:id
- post_type - тип записи, в нашем случае 'post'
- post_parent - ноль для нового поста. Если это новая версия поста, то id родительской записи поста
- post_title - Заголовок поста
- post_name - код поста, его алиас, который будет использован при формировании ЧПУ (человеко подобный URL). Это значение обычно получается транслитерацией заголовка поста
- post_content - HTML содержимое поста
- post_date, post_date_gmt - дата поста и дата поста в GMT
- post_modified, post_modified_gmt - дата последней модификации поста и дата последней модификации поста в GMT
- post_status - статус поста, 'publish'. Для новой версии - 'inherit'
- comment_status - 'open', если комментирование поста разрешено
- ping_status - 'open'
- comment_count - изначально ноль
- post_author - id пользователя - автора. Можно использовать, например, id администратора из wp_users
- menu_order - ноль для поста
- post_excerpt - описание поста
Далее, нам необходимо связать пост с рубрикой. Как создать новую рубрику или получить id существующей, было написано выше. Для связи поста с новой рубрикой создаем запись в таблице wp_term_relationships, заполнив следующие поля:
- object_id - id поста
- term_taxonomy_id - id рубрики.
Запись рубрики в wp_term_taxonomy необходимо модифицировать, увеличив значение поля count на единицу. Это счетчик постов, привязанных к рубрике.
Если пост относится к нескольким рубрикам, повторяем алгоритм связывания поста с рубрикой для каждой рубрики.
Следующим этапом связываем пост с ключевыми словами или тэгами. Обычно с постом связано несколько тэгов. Для каждого тега выполняем действия:
поиск term_id по имени тэга в таблице wp_terms. Если записи не найдено, создаем ее.
Если же запись найдена, то ищем тэг в
wp_term_taxonomy
SELECT term_taxonomy_id
FROM wp_term_taxonomy
WHERE term_id=:term_id
AND taxonomy='post_tag'
возможно, там есть такая запись. Если же term_taxonomy_id не найден или же это новый тэг в таблице wp_terms, тогда создаем запись в wp_term_taxonomy, заполнив поля:
- term_taxonomy_id - id тэга, автоинкреметное поле
- term_id - известный нам term_id
- taxonomy - 'post_tag'
- parent - 0
- count - 0
На этом этапе мы оформили наш тэг или проверили, что он уже существует с базе данных. Далее необходимо связать тэг и пост. Для этого формируем запись в таблице wp_term_relationships с полями:
- object_id - id поста
- term_taxonomy_id - полученный нами ид тэга
- term_order - 0
В итоге необходимо увеличить значение поля count на единицу в таблице wp_term_taxonomy для нашего тэга. Это счетчик использования тэга в постах.
Если тэгов несколько, то повторяем эту операцию для каждого тэга
Как удалить пост
При удалении поста в общем случае мы последовательно должны удалить несколько записей в таблице
wp_posts, сначала версии поста, затем основную запись. Но перед удалением каждой записи необходимо удалить связи этой записи с рубриками и тэгами. Например, так
DELETE FROM wp_term_relationships
WHERE object_id=:id
где :id - идентификатор удаляемой записи.
Однако перед удалением каждой связи необходимо найти соответствующую запись в wp_term_taxonomy и уменьшить счетчик count на единицу.
Если после уменьшения счетчика он принимает значение ноль, то запись в wp_term_taxonomy также можно удалять. Это означает что рубрика или тэг более не привязана ни к одному посту. Аналогично, перед удалением записи в wp_term_taxonomy можно проверить использование термина другими записями в wp_term_taxonomy. И если термин более нигде не используется, удалить запись и в таблице wp_terms
Как обновить пост
Обновление может выполняться в двух режимах. Первый - создание новой версии поста, он почти не отличается от создания нового поста, как описано выше. Второй - мы не используем версии, в этом случае просто обновляем основную запись поста. Однако этот пост мог правиться и из админки Wordpress, и там могли быть созданы версии. Поэтому перед обновлением записи поста желательно удалить возможно существующие версии. Алгоритм удаления записи в таблице wp_posts был описан выше.
Как добавить страницу
Добавление страницы похоже на добавление поста, отличие состоит в следующих полях таблицы wp_posts:
- post_type - 'page'
- post_parent - ноль или id родительской страницы
- post_excerpt - null, описание для страницы не заполняется
- guid - URL записи в виде www.foxbase.ru/?page_id=:id
- menu_order - порядкоый номер страницы, используется для определения порядка вывода страниц
Связи с рубриками и тэгами для страницы не определяются.
Как заставить Wordpress видеть новые URL
При создании новых записей напрямую в БД Wordpress минуя стандартный WEB интерфейс иногда необходимо заставить CMS обновить правила формирования URL, чтобы в эти правила были включены и новые записи. В противном случае, например для страниц, Wordpress не сможет находить новые URL до тех пор, пока он не обновит эти правила по событию, предсказать которое заранее довольно трудно. Для того, чтобы эти правила гарантировано были сформированы заново при первом же обращении к любому URL вашего сайта старые правила можно просто удалить после формирования записей нового поста или страницы:
DELETE FROM options
WHERE option_name='_transient_rewrite_rules'
Смотрите также:
Оставьте свой комментарий
Вы должны быть авторизированны, чтобы оставить комментарий.