Работа с данными в WordPress. Часть 4: Работа с записями в WordPress

Как и многие другие термины в WordPress, термин «записи» (posts) может показаться запутанным, поскольку под ним подразумевается не только определенный тип записей (да, записи – это тип записей), но и тип контента, который хранится в определенной таблице базы данных.

В данной статье я постараюсь объяснить разницу между этими двумя видами записей, а также рассмотрю типы записей более подробно.

В предыдущей части этой серии я описал разные типы контента в WordPress, которые хранятся в различных таблицах базы данных. Такими типами контента были:

  • Записи
  • Пользователи
  • Комментарии
  • Ссылки

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

Определение записей

Во-первых, я объясню, что представляют собой записи и чем они отличаются от Записей (да, все это несколько запутанно, и прописная буква ничуть не исправляет положение):

  • Начнем с того, что запись (post) – это элемент контента, который хранится в таблице wp_posts. Каждая запись имеет связанный с собой тип post_type, который может быть post, page и т.д.
  • Запись – это тип записей, используемый для постов блога или новостей, что зависит от типа сайта, который вы разрабатываете.

Таблица wp_posts показана на скриншоте ниже.

wp-posts-table

Все понятно? Если нет, то продолжайте чтение, все станет ясным.

Типы записей в WordPress

В WordPress имеется 5 встроенных типов записей:

  • Запись
  • Страница
  • Вложение
  • Ревизия
  • Пункт навигационного меню

В дополнение к ним вы можете также добавлять свои собственные типы записей, используя функцию register_post_type(), которая позволяет создать столько типов записей, сколько вам нужно в вашей сборке. Каждый тип записей имеет тот же самый статус, что и встроенные типы записей; иногда я встречал людей, которые считали, что «произвольный тип записей» — это такой отдельный тип записей. Это не так.

Проиллюстрирую я работу с типами записей с помощью простого примера. При написании произвольного запроса для записей вам понадобилось бы добавить следующий код к своим аргументам запроса:

'post_type' => 'post'

Однако если вы создали произвольный тип записей, который называется my_post_type, то вам нужно будет указать следующее:

'post_type' => 'my_post_type'

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

Стандартные типы записей

Давайте бегло взглянем на каждый из встроенных типов записей, чтобы понять, в чем они похожи и чем отличаются друг от друга. Обратите внимание, что в таблице ниже я использую термин «запись» в общем смысле, чтобы описать контент всех типов записей.

Тип записейИспользуется дляПримечание
ЗаписьЗаписи блога или что-то подобноеОсновной тип записей – выводится на главной странице блога
СтраницыСтатичные страницыРазработаны для вывода отдельных страниц на экран – обычно не используются для вывода архивов (хотя могут использоваться).
Страницы могут иметь родителей, которые определяются с помощью поля post_parent у дочерней страницы.
Каждая страница может иметь много дочерних страниц, но только одну родительскую.
ВложениеДокументы и изображения (которые могут быть прикреплены к записям)Медиа-файлы, загруженные к записям, будут иметь ID этой записи в поле post_parent. Изображения, загруженные через экран Медиа в консоли, будут иметь пустое поле post_parent. Поле guid используется для хранения URL медиа-файла.
РевизияОтдельная ревизия определенной записиКаждая ревизия прикрепляется к записи: ID записи хранится в поле post_parent.
Пункты навигационного менюОтдельные пункты навигационного менюЛюбое меню состоит из нескольких пунктов, каждый из которых хранится как запись. Поле menu_order используется для хранения информации о порядке следования пунктов меню; дополнительные данные, такие как target, а также родительский пункт меню, хранятся в таблице wp_postmeta.

Произвольные типы записей могут вести себя так же, как и встроенные типы записей (исключая вложения), однако стандартным является запись. Каждый тип записей имеет свой собственный интерфейс.

Отношения между записями

Как вы можете видеть из таблицы выше, поле post_parent очень важно, поскольку оно хранит информацию об отношениях между разными записями, которые включают в себя:

  • Отношения между родительскими и дочерними страницами
  • Отношения между ревизиями и записью, с которой они связаны
  • Отношения между вложениями и записью, к которой они были загружены

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

'post_parent' => 'ID'

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

Чтобы сделать это, используйте следующий аргумент:

'post_parent' => '0'

Очень маловероятно, что вам когда-либо придется получать ревизии, поскольку, скорее всего, вы желаете, чтобы пользователи видели только опубликованный контент.

Вы можете использовать post_parent_in с массивом ID для определения дочерних элементов многочисленных записей и страниц.

Заключение

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

Таблица также хранит в поле post_parent данные об отношениях между записями.

Источник: code.tutsplus.com

Блог про WordPress
Добавить комментарий

Получать новые комментарии по электронной почте.