Wordpress

Get post meta wordpress: get_post_meta() | Function | WordPress Developer Resources

18.03.2023

WordPress: доступ к метаполям поста через WP_Post.

Введение

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

$post и $posts

Как вы знаете, большинство страниц в WordPress автоматически заполняются переменными $post и $posts . Где $post представляет объект сообщения для текущей страницы. И $постов будет массивом всех объектов сообщений для этой страницы.

Чтобы визуализировать содержимое этих переменных, вы можете просто print_r() или var_dump() их.

Посмотреть суть на GitHub

И вы получите результат, аналогичный показанному ниже.

См. этот список на GitHub

Обратите внимание, что выходные данные представляют собой не массив, а экземпляр класса WP_Post , и что он содержит все стандартные значения, связанные с публикацией. Мы вернемся к этому позже.

используйте get_post_meta()

Если вы хотите получить доступ к мета-значению поста в своем коде, вы обычно используете функцию get_post_meta() .

Чтобы проверить это, мы сначала должны добавить мета-значение к сообщению. В приведенном ниже коде мы используем функцию add_post_meta() , чтобы добавить метаполе some_meta_field и присвоить ему значение some_value .

Посмотреть суть на GitHub

Затем мы можем использовать функцию get_post_meta() для доступа к some_meta_field на пост.

Посмотреть суть на GitHub

Это, конечно, выведет ‘ some_value ’.

Доступ к метаполям через WP_Post

Как я упоминал ранее, переменная $post — это не стандартный массив, а экземпляр класса WP_Post . Когда мы использовали print_r() для проверки содержимого переменной $post , мы увидели, что она содержит только стандартные значения для каждого объекта сообщения. Он не показывает никаких мета-значений. Конечно, это невозможно, потому что метаполя могут быть разными для каждого поста, поэтому их нельзя закодировать в классе.

Но на самом деле класс WP_Post может получить доступ к метаполям. Если мы проверим код класса, то увидим, что WP_Post реализует магический метод __get() .

Функция метода _ _get() состоит в том, чтобы предоставить запасной вариант, когда свойство вызывается в несуществующем классе. Поэтому, когда мы пытаемся получить доступ к $post->i_dont_exist , вызывается метод _ _get() , чтобы попытаться определить значение для этого свойства.

Ниже приведена фактическая реализация метода __get() для класса WP_Post в wp-includes/class-wp-post.php .

Посмотреть этот список на GitHub

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

Это означает, что если мы попытаемся получить доступ к метаполю объекта $post следующим образом: $post->some_meta вызывается метод __get() , и он будет использовать функцию get_post_meta для разрешения значения.

Чтобы вернуться к примеру some_meta_field ранее в этом посте. Мы могли бы опустить функцию get_post_meta () и просто получить доступ к some_meta_field объекта $post , как показано ниже.

Посмотреть суть на GitHub

Это вернет ‘some_value’ точно так же, как get_post_meta (), но, как вы можете видеть, это выглядит намного чище.

Другие значения

Если вы посмотрите на метод __get() в классе WP_Post , вы заметите еще несколько значений, к которым можно получить прямой доступ. В Gist ниже показаны значения, которые могут быть разрешены.

Посмотреть суть на GitHub

Заключение

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

Если вы хотите прокомментировать этот пост, сделайте это под копией этой статьи на Dev.to.

Следите за мной в Твиттере @Vanaf1979 или на Dev.to @Vanaf1979 , чтобы получать уведомления о новых статьях и других материалах, связанных с разработкой WordPress.

Спасибо за внимание.

Автоматизация WordPress с помощью мета действия Manage WP post

WP Webhooks

Войти

Get WP Webhooks

Account