get_metadata

Получает метаданные указанного объекта (пост, комментарий, пользователь).

Кэширует результат.

✈ 1 раз = 0.00013с = быстро | 50000 раз = 1.0с = очень быстро
Хуки из функции:
get_(meta_type)_metadata
Возвращает

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

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

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

get_metadata( $meta_type, $object_id, $meta_key, $single );
$meta_type(строка) (обязательный)
Тип объекта, метаданные которого нужно получить. Может быть: post, page, comment, user и т.д.
По умолчанию: нет
$object_id(число) (обязательный)
ID типа объекта, указанного в $meta_type, метаданные которого нужно получить. Например, тут пишем ID поста, если тип post.
По умолчанию: нет
$meta_key(строка)
Название ключа метаполя. Если не указать этот параметр, будут возвращены все метаданные данного объекта.
По умолчанию: ”
$single(логический)

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

При false – будет возвращен массив со значениями всех метаполей указанного ключа. В этом случае все значения будет строками, даже когда в значении находится сериализованный массив (преобразовывать его в массив нужно будет вручную).
По умолчанию: false

Примеры

#1. Вывод метаданных постов

Несколько примеров, которыми можно вывести метаданные постов, пользователей и комментариев. Т.е. это альтернативы соответствующих функций ВП: get_post_meta(), get_user_meta(), get_comment_meta().

// получим произвольное поле поста 17, сразу в переменную
$post_meta = get_metadata('post', 17, 'robots', true);

// Получим Ник пользователя 14
$user_meta = get_metadata('user', 14, 'nickname', 1);

// Получим все метаданные комментария 115, в виде массива.
$comment_meta = get_metadata('comment', 115);

Заметки

Код из


wp-includes/meta.php

WP 4.7.2

<?php
function get_metadata($meta_type, $object_id, $meta_key = '', $single = false) {
	if ( ! $meta_type || ! is_numeric( $object_id ) ) {
		return false;
	}

	$object_id = absint( $object_id );
	if ( ! $object_id ) {
		return false;
	}

	/**
	 * Filters whether to retrieve metadata of a specific type.
	 *
	 * The dynamic portion of the hook, `$meta_type`, refers to the meta
	 * object type (comment, post, or user). Returning a non-null value
	 * will effectively short-circuit the function.
	 *
	 * @since 3.1.0
	 *
	 * @param null|array|string $value     The value get_metadata() should return - a single metadata value,
	 *                                     or an array of values.
	 * @param int               $object_id Object ID.
	 * @param string            $meta_key  Meta key.
	 * @param bool              $single    Whether to return only the first value of the specified $meta_key.
	 */
	$check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single );
	if ( null !== $check ) {
		if ( $single && is_array( $check ) )
			return $check[0];
		else
			return $check;
	}

	$meta_cache = wp_cache_get($object_id, $meta_type . '_meta');

	if ( !$meta_cache ) {
		$meta_cache = update_meta_cache( $meta_type, array( $object_id ) );
		$meta_cache = $meta_cache[$object_id];
	}

	if ( ! $meta_key ) {
		return $meta_cache;
	}

	if ( isset($meta_cache[$meta_key]) ) {
		if ( $single )
			return maybe_unserialize( $meta_cache[$meta_key][0] );
		else
			return array_map('maybe_unserialize', $meta_cache[$meta_key]);
	}

	if ($single)
		return '';
	else
		return array();
}

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


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

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