Один из факторов, который делает WordPress мощным CMS инструментом — это возможность использовать таблицу wp_postmeta для хранения собственных полей. Эти поля могут содержать дополнительную информацию, например SEO-поля, добавленные SEO плагином, или могут быть использованы для отображения дополнительного контента клиентской части.
Добавляя к полям эту дополнительную информацию, вы можете создавать собственные запросы для организации отображения вашего контента.
Обучение работе с этими данными — хороший способ выучить базовые понятия PHP, такие как массивы, циклы и объекты. Чтобы полностью овладеть мета-данными WordPress, вы должны овладеть всеми видами массивов.
В этом руководстве я покажу вам разные способы работы с мета-данными WordPress записей, а также с мета-данными пользователей в качестве примеров работы с массивами.
Что такое мета-данные записи?
Самое техническое определение мета-данных записи — это любая информация, хранимая в таблице wp_postmeta. По умолчанию там не так уж много информации, но плагин или тема в любой момент могут добавить свое поле, а данные, введенные в это поле, будут храниться в таблице wp_postmeta. Хороший пример — SEO-поля, добавляемые SEO-плагином. Например, вспомните мета-описание вашего поста. Это поле хранится в таблице wp_postmeta.
Также собственными полями могут быть дополнены профили пользователей WordPress. И как для таблицы wp_posts есть таблица wp_postmeta, так данные для пользователей хранятся в таблице wp_usermeta, а не в таблице wp_user.
В этой серии статей мы не будем говорить о том, как добавлять собственные поля в WordPress — это отдельная тема. Собственные поля могут быть добавлены в редакторе записи с помощью мета-блока "Произвольные поля", могут быть добавлены напрямую плагином или темой, а также через использование специального фреймворка, по типу Pods или Advanced Custom Fields.
Технически, мета-данные записи — это любая информация, хранящаяся в таблице wp_postmeta. Как мы упоминали ранее, хороший пример мета-данных записи — поле мета-описания, которое добавляется плагинами типа WordPress SEO.
Методы получения мета-данных
Использование get_post_meta()
WordPress предоставляет множество способов получения мета-данных для записи.
С помощью get_post_meta() мы можем получить только одно поле, указав его. Например, чтобы получить поле под названием 'foo' из текущей записи в цикле, мы можем сделать:
get_post_meta( get_the_id(), 'foo', true );
Обратите внимание, что последний переданный нами аргумент — true. Этот аргумент под названием "single" определяет, хотим мы получить в ответ отдельное значение или массив значений.
Использование WP_Query
Иногда мы хотим сделать целый цикл вокруг мета-данных, и в этом случае очень пригодится WP_Query. WP_Query позволяет нам делать так называемый "мета-запрос", где запрос на записи основывается на мета-полях и возвращает записи, которые содержат значения, соответствующие запрашиваемым. Результатом будет коллекция, по которой мы можем проходить в цикле.
Например, представьте, что у нас есть поле под названием "author_name" и мы хотим вернуть все записи, где в поле author_name содержится значение 'Tolkien'. WP_Query позволяет нам делать это очень просто — мы рассмотрим это подробнее в следующем руководстве этой серии.
Не записями едиными
Мета-данные есть не только у записей. Например, вы знаете все поля, которые доступны в профиле пользователя? Это мета-поля, но хранятся они не в wp_postmeta, а в таблице wp_usermeta.
В результате, у нас есть отдельные функции и классы для мета-данных пользователя. Функции get_user_meta() и get_author_meta() — эквивалент аналогичным командам записей. У WP_Query тоже есть свой эквивалент для пользователей — WP_User_Query.
Объекты или массивы
Когда вы используете функции типа get_post_meta() для получения более чем одного поля, вы, скорее всего, получите то, что называется многомерным массивом. Многомерный массив также известен как массив массивов. Каждый массив внутри многомерного массива может в свою очередь тоже быть многомерным.
Звучит страшно? Не бойтесь! В этой серии статей мы расскажем о том, как читать многомерные массивы для того, чтобы получить нужную вам информацию.
И наконец, как мы упоминали ранее, другой метод получения информации о записи — это использование WP_Query. Когда вы используете класс WP_Query, вы используете то, что называется объектно-ориентированным PHP, и в результате вы получаете не массив — вы получаете объект.
В некотором роде объекты похожи на массивы — они могут содержать массивы данных. Но к объекту вы можете применять любую функцию класса. То есть, мы можем не только использовать объект WP_Query для возвращения значения мета-поля, но также можем использовать его внутренние методы, самый популярный из которых — the_post().
В следующем выпуске…
В данный момент мы рассмотрели разные типы мета-данных, способ их хранения и представления, а также способы их получения.
В продолжение этой серии статей мы рассмотрим подробнее каждый аспект таблиц мета-данных, связанные с ними API, а также как мы можем использовать их для внедрения новых функций в наши проекты.
Комментарии к записи: 2
Класс, буду ждать продолжения.
Больше бы статей затрагивающих и PHP заодно, чтобы понимать как это сделано а не слепо повторять то что описано в статьях.
Народ может кто подскажет. С какого то перепугу сайт http://d-nk.com.ua/ начал грузить проц хостера.
Вот что пишет Хостинг
«В том-то и проблема, что определить причину нагрузки не удается.
Я просмотрел нагрузку по вашему аккаунту с начала лета — она медленно, но постоянно растет — где-то в начале июня она в среднем перевалила через 1%, в начале октября — через 2%, в середине ноября — через 3%.
Потому мне кажется — где-то какие-то данные, которые используются при генерации страниц, накапливаются и таким образом замедляют обработку страниц все дальше и дальше.
Больше всего строк у вас в таблицах: wp_comment_rating, wp_login_fails, wp_postmeta, wp_term_relationships, wp_yapp_related_cache.
Первым делом я бы попробовал отключить комментарии или систему их оценки (рейтинга). Возможно при этом стоит удалить содержимое таблицы (можно перед этим сделать бекап содержимого).
login_fails теоретически должна влиять только на вход в админку.
Что хранится в postmeta я, к сожалению, не знаю, а это самая большая таблица. Про term_relationships я также ничего не знаю, но она поменьше.
yapp_related_cache — это скорее всего таблица какого-то модуля. Если есть идеи — какого, можно попробовать его отключить/удалить.»
То есть какую из этих таблиц можно смело почистить не нанеся вред работе сайта