get_post_meta

Возвращает значение указанного произвольного поля записи (поста). Можно получить массив всех полей записи (поста).

Для того, чтобы получить значение всех произвольных полей определенного поста, нужно оставить пустым параметр $key. Также для этого можно воспользоваться функцией get_post_custom().

Если в данных содержится сериализованный массив (serialize), то он автоматом будет обработан функцией unserialize(), т.е. чтобы получить сериализованные данные их не нужно отдельно обрабатывать функцией unserialize().
✈ 1 раз = 0.00013с = быстро | 50000 раз = 1.0с = очень быстро

Хуков нет.

Возвращает

Строку/число/массив.

  • Вернет значение метаполя в виде строки/числа/массива при $single=true.
  • Вернет массив значений метаполя в виде массива при $single=false.
  • Вернет false, если неправильно переданы $meta_type или $object_id.
  • Если указанного метаполя не существует, то вернет при $single=true и array() при $single=false.

Использование

$meta_values = get_post_meta( $post_id, $key, $single );
$post_id(число) (обязательный)
ID поста, произвольные поля которого нужно получить.
По умолчанию: нет
$key(строка) 
Название произвольного поля, значение которого нужно получить. Если оставить поле пустым, будут получены все произвольные поля поста.
По умолчанию: ”
$single(логический)

true – вернет значение метаполя (если полей несколько то вернет значение первого метаполя).
false – вернет массив всех значений мета полей с указанным ключом.

Если в значении произвольного поля находится сериализованный массив, то значение true вернет, нормальный массив, а если указать false, то вернется массив в элементе “[0]” которого будет все тот же сериализованный массив.

По умолчанию: false

Примеры

#1. Получим массив значений произвольных полей

Получим значения полей поста 76, ключ которых равен key_1, подразумевается что у поста не одно произвольное поле с ключом key_1:

<?php $key_1_values = get_post_meta(76, 'key_1'); ?>

#2. Получим только одно произвольное поле

Чтобы получить только первое (или единственное) значение произвольного поля в виде строки, используем такой вызов функции:

<?php $key_1_value = get_post_meta(76, 'key_1', true); ?>

#3. Объединение всех метаполей в объект

Этот пример показывает как можно удобно объединить все произвольные поля записи.

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

Подразумевается, что ключи произвольных полей не в кириллице и у поля с одним ключом предусмотрено только одно значение – все это обычное явление:

$metas = get_post_meta( $post->ID );
if( isset($metas['key_name']) ){
	echo 'Мета поле "key_name" существует, не важно какое там значение.';
}

#6. Использования функций произвольных полей на примере авторской функции

/*******************
Эта функция обрабатывает два мета тега (произвольных поля): mood и listening_to.
Она может быть вызвана тремя разными вариантами (действиями): update, delete и get (по умолчанию).
Когда функция работает как update (обновление), оба параметра $mood и $listening_to должны быть указаны.
Пример вызова: mood_music( $post->ID, 'update', 'Happy', 'Bon Jovi - It's My Life' );
*******************/
function mood_music( $post_id, $action="get", $mood = 0, $listening_to = 0 ){

  // Проверка (switch) какое из действий нужно выполнять update, delete или get
	switch ($action) {
		case "update" :
		  if( ! $mood && ! $listening_to )
			//Если не переданы данные для обновления, останавливаемся
			return false;

		  //Использование функции add_post_meta():
		  //add_post_meta( $post_id, $meta_key, $meta_value, $unique = false )

		  //Если передана переменная $mood, создаем произвольное
		  //поле 'mood', со значением этой переменной.
		  //Если такое произвольное поле уже существует,
		  //то эта команда создаст еще одну мета запись
		  if( $mood ) {
			add_post_meta( $post_id, "mood", $mood );
			return true;
			}
		  //Использование функции update_post_meta():
		  //update_post_meta( $post_id, $meta_key, $meta_value )

		  //Если передана переменная $listening_to, создаем произвольное
		  //поле 'listening_to', со значением этой переменной.
		  //Если такое произвольное поле уже существует, то эта команда
		  //обновит его данные на новое значение переданное в переменной $listening_to.
		  if( $listening_to ) {
			add_post_meta( $post_id, "listening_to", $listening_to, true ) or
			  update_post_meta( $post_id, "listening_to", $listening_to );
			return true;
		  }
		case "delete" :
		  //Использование функции delete_post_meta:
		  //delete_post_meta( $post_id, $meta_key, $prev_value = "" )

		  //Удаляем все произвольные поля с ключами mood и listening_to у указанного поста.
		  delete_post_meta( $post_id, "mood" );
		  delete_post_meta( $post_id, "listening_to" );

		  //Если нужно удалить только поле 'mood' со значением "sad", используем такой код:
		  //delete_post_meta( $post_id, 'mood', 'sad' );
		break;
		case "get" :
		  //Использование функции get_post_custom():
		  //get_post_meta( $post_id, $meta_key, $single value = false )

		  //$stored_moods будет массивом содержащим все значения произвольных полей с ключом 'mood'
		  $stored_moods = get_post_meta( $post_id, "mood" );
		  //$stored_listening_to будет значением первого произвольного поля 'listening_to'
		  //(подразумевается, что таких полей несколько)
		  $stored_listening_to = get_post_meta( $post_id, "listening_to", true );

		  //Теперь нам нужно вывести на экран настроение (mood), для этого
		  //мы должны вызвать эту функцию в шаблоне так:
		  //пример: echo mood_music( $post->ID, 'get' );

		  $return = "<div class="mood-music">";
		  if ( ! empty( $stored_moods ) )
			$return .= "<strong>Мое Настроение</strong>: ";
		  foreach( $stored_moods as $mood )
			$return .= $mood . ", ";
		  $return .= "<br/>";

		  if ( ! empty( $stored_listening_to ) ) {
			$return .= "<strong>Сейчас я слушаю</strong>: ";
			$return .= $stored_listening_to;
			}
		  $return .= "</div>";

		  return $return;
		default :
		  return false;
		break;
	} //Конец проверки switch
}

Код из


wp-includes/post.php

WP 4.7.2

<?php
function get_post_meta( $post_id, $key = '', $single = false ) {
	return get_metadata('post', $post_id, $key, $single);
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *