# Функция GET_POST_META() │ WP 1.5.0
Эта функция используется для получения значения определенного пользовательского поля записи в WordPress. Также можно получить массив всех метаполей записи.
## Получение метаданных
Чтобы получить значения всех пользовательских полей конкретной записи, оставьте параметр $key
пустым. Также вы можете воспользоваться функцией get_post_custom()
для выполнения аналогичной задачи.
Если метаданные содержат сериализованный массив, они будут автоматически обработаны с помощью функции unserialize()
. Это означает, что вам не нужно самостоятельно использовать unserialize()
для полученных данных.
### Используется:
- функция get_metadata()
### Использует:
- get_the_modified_author()
- get_attached_file()
- wp_get_attachment_url()
- get_post_thumbnail_id()
- wp_get_attachment_metadata()
- get_post_custom()
- get_page_template_slug()
- get_header_image_tag()
Время выполнения:
- 1 раз — 0.0007429 сек (медленно)
- 50000 раз — 0.12 сек (всего лишь)
- PHP 7.4.25, WP 6.0
**Без хуков.**
## Возврат значений
Функция возвращает различные значения в зависимости от переданных параметров:
- Возвращает false
, если параметр $post_id
указан неверно.
- Если $single = true
:
- строка/массив — если метаполе существует.
- пустая строка — если метаполе не существует.
- Если $single = false
:
- массив всех значений метаполя — если метаполе существует.
- пустой массив — если метаполе не существует.
**Примечание:** Если в метаполе хранится число, оно будет возвращено как строка (например, '54'
).
## Использование функции
```php
get_post_meta( $post_id, $key, $single );
$post_id
(int) (обязательный) — ID записи, для которой нужно получить пользовательское поле.$key
(string) — Название метаполя, значение которого нужно получить. Если поле оставить пустым, будут получены все пользовательские поля записи.- По умолчанию:
''
- По умолчанию:
-
$single
(bool) — Нужно ли вернуть одно значение.true
— вернуть единственное значение метаполя (если есть несколько значений с этим ключом, будет возвращено только первое).false
— вернуть массив всех значений метаполя с указанным мета-ключом.
Если значение пользовательского поля содержит сериализованный массив:
true
возвращает обычный массив.false
возвращает массив, первый ([0]) элемент которого содержит сериализованную строку.
По умолчанию: false
Примеры использования
Пример 1: Получение значения пользовательского поля
Этот пример показывает, как использовать эту функцию для получения значения пользовательского поля thumb
. Значение представляет собой ссылку на миниатюру изображения.
$thumb = get_post_meta( $post->ID, 'thumb', true );
if ( $thumb ) {
?>
Пример 2: Упрощенный доступ к метаполям
С версии WP 3.5 вы можете просто использовать:
$post->meta_key
Это эквивалентно:
get_post_meta( $post->ID, 'meta_key', true )
Это значительно упрощает код и делает его более читаемым.
Пример 3: Проверка существования метаполя
Когда вам нужно проверить, существует ли поле:
$metas = get_post_meta( $post->ID );
if( isset($metas['key_name']) ){
echo 'Метаполе "key_name" существует.';
}
Пример 4: Получение всех пользовательских полей записи
Если вы не укажете мета-ключ, функция вернет все метаполя записи.
Если значение сериализовано, оно будет извлечено как строка, то есть вам нужно будет сериализовать его самостоятельно:
$post_metas = get_post_meta( 76 );
/*
Array
(
['_edit_lock'] => Array
(
[0] => 1517175359:1
)
...
)
*/
$post_metas = array_combine( array_keys( $post_metas ), array_column( $post_metas, '0' ) );
/*
Теперь вывод будет выглядеть так:
Array (
['_edit_lock'] => 1517175359:1
...
)
*/
Пример 5: Объединение всех метаполей в объект
Этот пример показывает, как вы можете объединить все пользовательские поля записи, чтобы затем использовать их удобным способом.
// собираем мета-данные в объект
$meta = new stdClass;
foreach( (array) get_post_meta( $post->ID ) as $k => $v )
$meta->$k = $v[0];
// Получаем значение метаполя 'book'
echo $meta->book;
Изменение метаданных
Вы можете обновлять, удалять и получать метаданные с помощью функции mood_music()
, которая обрабатывает пользовательские метатеги о настроении и прослушиваемой музыке. Это позволяет вам управлять пользовательскими метаданными более удобно.
function mood_music( $post_id, $action = 'get', $mood = 0, $listening_to = 0 ) {
switch( $action ){
case 'update' :
// код для обновления метаполей
break;
case 'delete' :
// код для удаления метаполей
break;
case 'get' :
// код для получения метаполей
break;
default :
return false;
}
}
Общие рекомендации
Если вы хотите узнать, существуют ли метаполя с заданным ключом даже если они пусты, воспользуйтесь функцией get_post_custom_keys()
. Например:
$post_id = 1;
$meta_exists = in_array( 'key_1', get_post_custom_keys( $post_id ), true );
if( $meta_exists ) {
// корректно проверяем существование данного ключа
}
Заключение
Функция get_post_meta()
предоставляет мощный и гибкий способ работы с пользовательскими полями в WordPress. Она позволяет разработчикам легко извлекать и управлять метаданными, что делает ее важным инструментом для настройки и расширения функциональности сайта.
Лог изменений
С момента введения версии 1.5.0.