get_post_meta() WP 1.5.0

Набуває значення довільного поля запису (поста). Дозволяє також отримати всі метаполі.

Щоб отримати значення всіх довільних полів певного посту, потрібно залишити порожнім параметр $key . Також для цього можна скористатися функцією get_post_custom() .

Якщо даних міститься серіалізований масив (serialize), він автоматично буде оброблений функцією unserialize() , тобто. щоб отримати серіалізовані дані, їх не потрібно окремо обробляти функцією unserialize() .

Працює на основі:
get_metadata()
1 раз – 0.0007429 сек
(повільно) | 50000 разів – 0.12 сек
(дуже швидко) |
PHP 7.4.25, WP 6.0

Хуків немає.

Повертає

Разное.

Якщо у значенні метаполя зберігається число воно буде повернено у вигляді рядка, наприклад, "54"

  • Поверне false, коли неправильно передано параметр $post_id (не-numeric, 0 чи негативне значення).

  • При $single = true
    • строка/массивколи метаполі є.
    • ''коли метаполя немає.
  • $ single = false
    • массив значений метаполейколи метаполі є.
    • array()коли метаполя немає.

Використання

$meta_values ​​= get_post_meta( $post_id, $key, $single );
$post_id
(число) (обов’язковий)
ID посту, довільні поля якого потрібно отримати.
$key
(рядок)
Назву довільного поля, значення якого потрібно отримати. Якщо залишити поле порожнім, буде отримано всі довільні поля посту.


За замовчуванням: ”
$single
(логічний)

true– поверне значення метаполя (якщо полів дещо поверне значення першого метаполя).
false– Поверне масив всіх значень мета полів із зазначеним ключем.

Якщо значення довільного поля знаходиться серіалізований масив, то значення trueповерне, нормальний масив, і якщо вказати false, то повернеться масив, де у ключі ” [0] ” лежатиме той самий серіалізований масив.

Цей параметр працює тільки якщо вказано параметр $key!

Типово: false

Приклади

3

#1 Перевіримо існування вказаного метаполя

Коли потрібно перевірити, чи існує поле, з будь-яким значенням: порожній рядок або 0:

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

#2 Підрахунок кількості всіх довільних полів усіх записів

Цей приклад показує як одним запитом вивести всі унікальні довільні поля і порахувати скільки їх використовується в БД. Такий запит може стати в нагоді для профілювання довільних полів записів:

Global $wpdb;

$data = $wpdb->get_results(
	"SELECT meta_key, count(*) як count FROM $wpdb->postmeta WHERE meta_key NOT LIKE '_oembed%' GROUP BY meta_key"
);

print_r ($ data);

/*
Array (
	[0] => stdClass Object (
			[meta_key] => _edit_lock
			[count] => 2300
		)

	[1] => stdClass Object (
			[meta_key] => _edit_last
			[count] => 2123
		)
	...
)
*/
1

#3 Приклад використання get_post_meta() всередині циклу WordPress.

Приклад нижче показує, як використовувати функцію для отримання значення довільного поля thumb, у значенні якого зберігається посилання на картинку-мініатюру, для того щоб отримати це посилання і використовувати її в шаблоні.

<?php
$thumb = get_post_meta($post->ID, 'thumb', true);

if ($thumb) {
	?>
	<a href="<?php the_permalink() ?>" rel="bookmark">
		<img class="thumb" src="<?php echo $thumb ?>" alt="<?php the_title(); ?>" />
	</a>
	<?php
}
?>
1

#4 Використання функцій довільних полів на прикладі авторської функції

/**
 * Ця функція обробляє два мета теги (довільних поля): `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;

			break;

		default :
			return false;

			break;

	} // Кінець перевірки switch

}
0

#5 Отримаємо масив значень довільних полів

Отримаємо значення полів посту 76, ключ яких дорівнює key_1, мається на увазі що пост постає кілька довільних полів з ключем key_1:

$ values ​​= get_post_meta( 76, 'key_1' );
/*
Array
(
	[0] => значення 1
	[1] => значення 2
)
*/
0

#6 Отримаємо всі довільні поля запису

Якщо не вказати ключ довільного поля для функції, вона отримає всі поля відразу:

$ Metas = get_post_meta (76);
/*
Array
(
	[_edit_lock] => Array
		(
			[0] => 1517175359:1
		)

	[_edit_last] => Array
		(
			[0] => 1
		)

	10 views => Array
		(
			[0] => 10164
		)

	[_thumbnail_id] => Array
		(
			[0] => 9556
		)

	[photo] => Array
		(
			[0] => https://wp-doc.com/wp-content/uploads/2010/03/Quicktags-API.png
			[1] => https://wp-doc.com/wp-content/uploads/2017/07/image.png
		)

)
*/
0

#7 Отримаємо лише одне довільне поле

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

$ value = get_post_meta (76, 'key_1', true); //> значення 1
0

#8 Об’єднання всіх метаполів в об’єкт

Цей приклад показує якомога зручніше об’єднати всі довільні поля запису.

Потрібно це, коли в коді передбачається використовувати багато різних полів запису. Отримувати кожне за допомогою цієї функції не зручно, зручніше отримати один раз усі поля, створити з них об’єкт і брати дані з об’єкта – це працює швидше, і коду менше, і зрозуміліше.

Мається на увазі, що ключі довільних полів не в кирилиці і біля поля з одним ключем передбачено лише одне значення – все це звичайне явище:

// Зберемо всі метаполя в об'єкт $meta
$meta = new stdClass;
foreach( (array) get_post_meta( $post->ID ) as $k => $v ) $meta->$k = $v[0];

// Тепер, припустимо запис є метаполі 'book'
// Отримуємо його так:
echo $meta->book;

WordPress має незадокументовану можливість отримувати метаполі запису так: $post->my_meta_key , де $post – об’єкт WP_Post, а my_meta_key – назва метаполя, яку потрібно отримати.

0

#9 Перевірка, що мета-поле існує

// для single значення
$ value = get_post_meta (76, 'key_1', true);

if( '' !== $value ){
	// мета-поле є
}

// для multiple значення
$ value = get_post_meta( 76, 'key_1' );

if( [] !== $value ){
	// мета-поле є
}

список змін

З версії 1.5.0Введено.

Код get_post_meta() WP 6.0.2

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *