get_post_meta()
Получает значение произвольного поля записи (поста). Позволяет также получить все метаполя.
Для того, чтобы получить значение всех произвольных полей определенного поста, нужно оставить пустым параметр $key. Также для этого можно воспользоваться функцией get_post_custom().
Если в данных содержится сериализованный массив (serialize), то он автоматом будет обработан функцией unserialize(), т.е. чтобы получить сериализованные данные их не нужно отдельно обрабатывать функцией unserialize().
Хуков нет.
Возвращает
Разное.
Если в значении метаполя хранится число оно будет возвращено в виде строки, например, "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
Примеры
#1 Использования функций произвольных полей на примере авторской функции
#2 Пример использования 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
}
?> #3 Проверим существование указанного метаполя
Когда нужно проверить существует ли поле, с любым значением: пустая строка или 0:
$metas = get_post_meta( $post->ID );
if( isset( $metas['key_name'] ) ){
echo 'Мета поле "key_name" существует, не важно какое там значение.';
} #4 Подсчет кол-ва всех произвольных полей всех записей
Этот пример показывает как одним запросом вывести все уникальные произвольные поля и посчитать сколько всего их используется в БД. Такой запрос может пригодится для профилирования произвольных полей записей:
global $wpdb; $data = $wpdb->get_results( "SELECT meta_key, count(*) as 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 ) ... ) */
#5 Получим массив значений произвольных полей
Получим значения полей поста 76, ключ которых равен key_1, подразумевается что у поста несколько произвольных полей с ключом key_1:
$values = get_post_meta( 76, 'key_1' ); /* Array ( [0] => значение 1 [1] => значение 2 ) */
#6 Получим все произвольные поля записи
Если не указать ключ произвольного поля для функции, то она получит все поля сразу.
Если значение сериализовано, то оно будет получено как строка, т.е. де-сериализовать нужно самостоятельно:
$metas = get_post_meta( 76 );
/*
Array
(
[_edit_lock] => Array
(
[0] => 1517175359:1
)
[_edit_last] => Array
(
[0] => 1
)
[views] => Array
(
[0] => 10164
)
[_thumbnail_id] => Array
(
[0] => 9556
)
[photo] => Array
(
[0] => https://wp-kama.ru/wp-content/uploads/2010/03/Quicktags-API.png
[1] => https://wp-kama.ru/wp-content/uploads/2017/07/image.png
)
[serialized_value] => Array
(
[0] => a:2:{s:4:"name";s:6:"hexlet";s:4:"type";s:5:"admin";}
)
)
*/ #7 Получим только одно произвольное поле
Чтобы получить только первое (или единственное) значение произвольного поля в виде строки, используем такой вызов функции:
$value = get_post_meta( 76, 'key_1', true ); //> значение 1
#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 - название метаполя, которое нужно получить.
#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() get post meta WP 6.9.1
function get_post_meta( $post_id, $key = '', $single = false ) {
return get_metadata( 'post', $post_id, $key, $single );
}