Статьи

Понимание и работа с метаданными в WordPress

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

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

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

  • сообщений
  • пользователи
  • Комментарии
  • связи

Первые три из них могут также иметь назначенные им метаданные, и у каждого есть своя собственная таблица метаданных в базе данных для хранения этого.

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

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

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

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

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

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

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

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

Все таблицы метаданных почти идентичны в том смысле, что в них всего четыре поля:

  • ID — это идентификатор сообщения, пользователя или комментария, к которому относятся метаданные.
  • Meta ID относится к идентификатору записи метаданных
  • Ключ — это мета-ключ (который часто дублируется между разными записями)
  • Значение является мета-значением (которое имеет тенденцию быть уникальным)

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

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

Но давайте посмотрим на некоторые из наиболее распространенных типов метаданных:

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

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

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

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

Функции 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 (необязательно)

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

1
2
3
4
5
6
7
<?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;
}
?>

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

WordPress использует три таблицы метаданных для хранения данных о трех типах контента: сообщения, пользователи и комментарии. Эти таблицы используются для всего, что не хранится в основных wp_posts , wp_users и wp_comments , и являются таблицами, в которые следует записывать данные, если вы добавляете новые поля с помощью тем или плагинов. Три таблицы работают практически одинаково и имеют очень похожие функции, которые вы можете использовать для добавления, обновления, удаления и получения метаданных.

Как я упоминал выше, термины таксономии можно рассматривать как другой тип метаданных в WordPress, и это то, что я расскажу в следующей части этой серии.