Работа с данными в WordPress. Часть 6: Работа с метаданными в WordPress

До сих пор в этой серии статей мы рассматривали основные типы контента в WordPress. Однако как быть с дополнительными данными, которые относятся к контенту?

Именно здесь и вступают в игру метаданные.

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

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

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

Что такое метаданные?

Метаданные могут быть описаны как данные о данных. Wikipedia определяет два типа метаданных:

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

Как следует из определения, в WordPress используются дескриптивные (описательные) метаданные. Здесь стоит отметить, что все это несколько размыто: не совсем ясно, что мы подразумеваем под данными в WordPress, а что относим к метаданным, и это не всегда соответствует тому, что хранится в таблицах метаданных. К примеру:

  • post_type – пример метаданных для записей, однако он хранится в таблице wp_posts
  • Термы таксономий, рубрики и метки могут также быть определены в некотором роде как метаданные, однако они хранятся отдельно в своих собственных таблицах БД.
  • Метаданные записей, такие как произвольные поля, а также дополнительные метаданные, добавленные через плагины, хранятся в таблице wp_postmeta, что вполне ожидаемо

Таким образом, проще воспринимать метаданные в WordPress не в строгом смысле определения, а как данные, хранящиеся в трех таблицах метаданных.

Таблицы метаданных

В WordPress используются три таблицы для метаданных:

  • wp_postmeta хранит метаданные о записях (куда относятся вложения, пункты навигационного меню и ревизии)
  • wp_commentmeta хранит метаданные о комментариях
  • wp_usermeta хранит метаданные о пользователях

Единственный тип объектов в WordPress, который не имеет метаданных – это ссылки.

Таблицы метаданных схожи между собой в том, что у них есть только 4 поля:

  • ID – ID записи, пользователя или комментария, с которым связаны метаданные
  • Meta ID – ID записи в таблице БД для метаданных
  • Key – ключ метаданных (который зачастую дублируется у разных записей)
  • Value – значение метаданных (которое обычно уникально)

Эта структура в WordPress может использоваться для хранения крупных объемов метаданных, что реализуется при помощи простой схемы. Функции, которые вы используете для вывода и получения метаданных записей и комментариев, очень похожи между собой.

Метаданные, хранящиеся в WordPress

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

Давайте взглянем на некоторые самые распространенные типы метаданных:

  • Произвольные поля. Они применяются к записям и сохраняются в таблице wp_postmeta. Вы можете добавить их, используя стандартный интерфейс Custom Fields, либо создав свои собственные панели для добавления метаданных на экране редактирования записей. Это может быть особенно полезно, если вы хотите сделать так, чтобы пользователи могли добавлять метаданные к определенному типу записей, и вы желаете, чтобы интерфейс для добавления метаданных был как можно более дружественным к людям.
  • Пользовательские метаданные. Таблица wp_usermeta хранит метаданные о большинстве пользователей: их роли, возможности, параметры консоли, имя и фамилию.
  • Метаданные, добавляемые плагинами и темами. Плагины с функциональностью комментариев, такие как Akismet, добавляют метаданные к таблице wp_commentmeta, в то время как плагины, позволяющие добавлять метаданные к записям (к примеру, SEO-плагины), обращаются к таблице wp_postmeta. Теоретически вы можете добавлять метаданные через свою тему, однако лучше делать это с помощью плагинов, поскольку метаданные обычно связаны с функциональностью, а не с выводом данных на экран.

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

Если вы добавляете новое поле для хранения данных, вы должны использовать таблицы метаданных вместо основных таблиц.

Получение и вывод метаданных

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

Функции Metadata API похожи для каждого типа контента и имеют одни и те же параметры:

Добавление метаданныхПолучение метаданныхОбновление метаданныхУдаление метаданных
Записиadd_post_meta()get_post_meta()update_post_meta()delete_post_meta()
Польз.add_user_meta()get_user_meta()update_user_meta()delete_user_meta()
Коммент.add_comment_meta()get_comment_meta()update_comment_meta()delete_comment_meta()
Парам.$post_id, $meta_key, $meta_value, $unique (необязательный)$post_id, $meta_key, $single (необязательный),$post_id, $meta_key, $meta_value, $prev_value (необязательный)$post_id, $meta_key, $meta_value (необязательный)

Эти функции могут использоваться в ваших шаблонах и плагинах; к примеру, в шаблоне для отдельной записи вашей темы вы могли бы использовать следующий код для вывода метаданных о записи:

<?php 
$metavalue = get_post_meta( get_the_ID(), 'my_meta_key', true);
// check if the custom field has a value
if ( ! empty( $metavalue ) ) {
  echo $metavalue;
} 
?>

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

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

Блог про WordPress
Комментарии: 2
  1. ilit70

    ..(‘my_meta_key’, true) запятую забыли..

    1. Дмитрий (автор)

      Спасибо, поправили.

Добавить комментарий

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