Функция GET_POST_META() в WordPress: Получение пользовательского поля записи

# Функция 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 ) {
    ?>
    
        <?php the_title(); ?>
    
    

Пример 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.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *