Произвольные поля для медиа-вложений WordPress

Обзор

Это руководство покажет, как добавить произвольные поля к вложению WordPress и затем вывести эти поля.

Все шаблонные функции (get_field(), the_field() и т. д.) можно использовать для загрузки значений из медиа-вложения, однако для обращения к вложению требуется второй параметр.

Журнал изменений

  • Добавлены типы вложений в правило местоположения в версии 5.6.0

Добавление полей

Плагин Advanced Custom Fields очень упрощает добавление произвольных полей к вложению, следуйте шагам ниже.

  1. На экране администрирования Произвольные поля нажмите кнопку Добавить новую, чтобы создать новую группу полей
  2. Добавьте поля, которые вы хотите видеть при редактировании вложения
  3. В разделе Местоположения выберите правило Вложение и укажите «Все» (чтобы показывать эту группу полей для всех вложений) или конкретный тип вложения (чтобы показывать эту группу полей только для определённых вложений)

Редактирование полей

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

  • Перейти на страницу администрирования Медиа > Библиотека и выбрать вложение.
  • Использовать кнопку Добавить медиафайл при редактировании содержимого записи.
  • Использовать поле ACF поле изображения или поле файла для выбора вложения.

WP хранит каждое вложение как объект записи в таблице wp_posts. ACF будет хранить все значения произвольных полей в таблице wp_postmeta.

Вывод полей

Настройка HTML для вложения WordPress будет отличаться в зависимости от контекста. Вложение используется разными темами по-разному. В следующем примере используется поле файла (из экрана редактирования записи) для выбора вложения. Выбранному вложению (.pdf) назначена «Миниатюра», которая отображается ниже вместе с информацией о файле.

Обратите внимание, как ID вложения используется для загрузки значения поля из выбранного вложения.

single.php

<?php 

// загрузить выбранный файл (из записи)
$file = get_field('file'); 

if( $file ): 
    
    // загрузить выбранную миниатюру (из вложения)
    $thumbnail = get_field('thumbnail', $file['ID']); 
    
    ?>
    <h2>Читать далее</h2>
    <div class="file">
        <a href="<?php echo $file['url']; ?>">
            <?php if( $thumbnail ): ?>
                <img class="thumbnail" src="<?php echo $thumbnail['url']; ?>" alt="<?php echo $thumbnail['alt']; ?>" />
            <?php endif; ?>
            <span><?php echo $file['filename']; ?></span>
        </a>
    </div>
<?php endif; ?>

Результат

Вот пример работы приведённого выше кода. Обратите внимание на тег <img>, созданный на основе значения Миниатюра вложения.

Примеры

Вывести поле

В этом примере будет выведено значение поля из вложения (ID вложения = 12)

<p><?php the_field('field_name', 12); ?></p>

Получить поле

В этом примере будет загружено значение поля из вложения (ID вложения = 12)

<?php

$variable = get_field('field_name', 12);

// выполнить что-нибудь с $variable

?>

Получение значения из другого поля изображения

В этом примере показано, как загрузить выбранное изображение из пользовательского поля, а затем загрузить произвольное поле из этого изображения.

<?php 

// получить поле изображения
$image = get_field('image');

// каждое изображение содержит произвольное поле с названием 'link'
$link = get_field('link', $image['ID']);

// вывод
?>
<a href="<?php echo $link; ?>">
    <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" />
</a>

Работа с полем Repeater

В этом примере показано, как пройти по значению repeater-поля во вложении (ID вложения = 123).

Обратите внимание, что внутри цикла have_rows вам не нужно использовать параметр $post_id для любых функций подполей (get_sub_field(), the_sub_field())

<?php if( have_rows('repeater', 123) ): ?>

    <ul>

    <?php while( have_rows('repeater', 123) ): the_row(); ?>

        <li><?php the_sub_field('title'); ?></li>

    <?php endwhile; ?>

    </ul>

<?php endif; ?>

Обновлено: 02.06.2026