Вывод произвольных полей ACF

Рассмотрим вывод произвольных полей, созданных в Advanced Custom Fields для WordPress. А так же, как вывести произвольные поля для терминов таксономии, например, "Рубрики" в шаблоне category.php
ACF

Содержание:

  1. текст, число, область текста, файл, медиа;
  2. изображение:
    1. массив;
    2. ссылка;
    3. id;
  3. галерея;
  4. повторитель;
  5. объект записи;
  6. группа;
  7. вывод поля, если оно заполнено;
  8. вывод полей для другой страницы;
  9. вывод полей для терминов таксономии;
  10. вывод полей для профиля пользователя;
  11. страница с опциями ACF;
    1. вывод полей в нужном шаблоне;
    2. дочерние страницы.

Типы полей - текст, число, область текста, файл, медиа

Чтобы вывести текст, область текста, число, файл или медиа, воспользуйтесь кодом ниже.

<?php the_field('имя_поля'); ?>

Тип поля - «Изображение»

Данный способ вывода изображения не позволяет вывести дополнительные данные об изображении. Только URL. Используйте следующий код.

<img src="<?php the_field('имя_поля_с_изображением'); ?>" />

ID изображения

При выборе формата вывода - ID изображения, используется функция wp_get_attachment_image().

$id_image = get_field('имя_поля');
$size = 'full'; // (thumbnail, medium, large, full или свой)

if ( $id_image ) {
    echo wp_get_attachment_image( $id_image, $size );
}

Ещё пример.

<?php $id_img = wp_get_attachment_image_src(get_field('имя_поля_изображения'), 'medium'); ?>
<img
    src="<?php echo $id_img[0]; ?>"
    alt="<?php echo get_the_title(get_field('имя_поля_изображения')); ?>"
/>

Массив изображения

$image_array = get_field('имя_поля_изображения');
if ( $image_array ) { ?>
    <img
        src="<?php echo esc_url($image_array['url']); ?>"
        alt="<?php echo esc_attr($image_array['alt']); ?>"
    />
<?php } ?>
  • <?php echo esc_url($image_array['url']); ?> - вывод URL изображения (полный размер);
  • <?php echo esc_url($image_array['sizes']['thumbnail']); ?> - вывод URL изображения (thumbnail, medium, large или кастомный);
  • <?php echo esc_attr($image_array['alt']); ?> - вывод alt изображения;
  • <?php echo esc_attr($image_array['title']); ?> - вывод заголовка изображения;
  • <?php echo esc_html($image_array['caption']); ?> - вывод подписи изображения.

Рассмотрим возвращаемый формат - массив изображения.

<?php 
$img_gallery = get_field('имя_галереи');
if ($img_gallery) { ?>
    <?php foreach( $img_gallery as $img ) { ?>
        <img
            src="<?php echo esc_url($img['sizes']['medium']); ?>"
            alt="<?php echo esc_attr($img['alt']); ?>"
        />
    <?php } ?>
<?php } ?>

Использование очень похоже на вывод изображений, за исключением использования цикла foreach().

Тип поля - «Повторитель»

Для вывода повторителя, используйте код ниже.

<?php
if ( have_rows('имя_поля_повторителя') ) { // если найдены данные

    while ( have_rows('имя_поля_повторителя') ) { the_row(); // цикл по строкам данных

        the_sub_field('имя_поля_в_повторителе');
    }
} else {
    // строки не найдены

}
?>

Тип поля - «Объект записи»

Для вывода нескольких значений «Объекта записи» используйте следующий код.

<?php
$post_objects = get_field('имя_поля_объект_записи');

if ($post_objects) : ?>
    <?php foreach ($post_objects as $post) : // переменная должна называться $post (ВАЖНО) ?>

        <?php setup_postdata($post); ?>

        <?php the_title(); ?>
        <?php the_excerpt(); ?>
        <?php the_field('имя_поля'); ?>
        <?php the_permalink(); ?>

    <?php endforeach; ?>
    <?php wp_reset_postdata(); // ВАЖНО ?>

<?php endif; ?>

Тип поля - «Группа»

Пусть вложенное поле будет изображением. Чтобы вывести вложенные поля с типом «Группа», воспользуйтесь следующим кодом.

<?php $group_fields = get_field('имя_поля_с_типом_группа'); ?>

<?php if ($group_fields) { ?>

    <?php foreach ($group_fields as $key => $item) { ?>
        <?php if ($item) { ?>
                <img
                    src="<?php echo esc_url($group_fields[$key]['sizes']['large']); ?>"
                    alt="<?php echo esc_attr($group_fields[$key]['alt']); ?>"
                    class="responsive"
                >
        <?php } ?>
    <?php } ?>

<?php } ?>

Вывод поля ACF только при условии, что оно заполнено

Для выполнения проверки заполнено ли поле, используйте get_field().

<?php if ( get_field('имя_поля') ) { ?>
    <?php the_field('имя_поля'); ?>
<?php } ?>

Вывод полей ACF с другой страницы

Для вывода полей с другой страницы нужно просто добавить id необходимой страницы/записи.

$page_id = 485;
<?php the_field('имя_поля', $page_id); ?>

Вывод поля для родительской страницы.

$mypost_Query = new WP_Query([запрос]);

if ( $mypost_Query->have_posts() ) {
    while ( $mypost_Query->have_posts() ) { $mypost_Query->the_post();
    
        $parent_id = get_the_ID(); // id текущей страницы


        $q = new WP_Query( [
            'posts_per_page' => -1,
            'post_type' => 'тип_записи',
            'post_parent' => $parent_id
        ] );

        echo "<ul>";

        if ( $q->have_posts() ) {
            if ( have_rows('prices_services', $parent_id) ) {
                while ( have_rows('prices_services', $parent_id) ) { the_row(); ?>
                    <li><?php the_sub_field('block_price'); ?></li>
                <?php }
            }
        <?php }

        echo "</ul>";

    }
}

Вывод полей ACF из терминов таксономии

Если мы создадим произвольное поле для элемента таксономии рубрики.

Создание кастомного поля для элемента таксономии

Оно (поле) у нас благополучно появится в рубриках

Создание кастомного поля для рубрики

Но когда мы захотим его вывести в шаблоне рубрики category.php, то у нас ничего не получится.

Необходимо использовать следующий код.

# Получаем текущий термин таксономии

$term = get_queried_object();

# Получаем и записываем значения произвольных полей в переменные

$var_main_title = get_field('главный_заголовок', $term);
$var_video1     = get_field('видео1', $term);
$var_video2     = get_field('видео2', $term);

# Выводим

<?php echo $var_main_title; ?>
<?php echo $var_video1; ?>
<?php echo $var_video2; ?>

Вывод полей ACF для профиля пользователя

Выведем ACF поля, созданные для вкладки профиль пользователя страницы «Пользователи».

ACF профиль пользователя

Получение поля для текущего пользователя.

$user_id = get_the_ID();
$field = get_field('имя_поля', 'user_' . $user_id);

Вывод поля для пользователя с id = 8.

the_field('имя_поля', 'user_8');

Страница опций ACF

Для создания страницы опций ACF добавьте следующий код в functions.php:

if (function_exists('acf_add_options_page')) {
    acf_add_options_page(array(
        'page_title' => 'Настройки темы',
        'menu_title' => 'Настройки темы',
        'menu_slug'  => 'theme_settings',
    ));
}

Теперь необходимо создать нужные поля. Переходим в «Группы полей». Выбираем «Отображать группу полей, если» - Формы - Страница с опциями равно Настройки темы. И добавляеете поля как обычно.

Вывод полей «Страницы опций»

Для вывода полей, заполненных на странице опций, используйте код:

<?php the_field('имя_поля', 'option'); ?>

Вложенные страницы с опциями

Более сложный пример с вложенными страницами:

if (function_exists('acf_add_options_page')) {

    acf_add_options_page(array(
        'page_title'  => 'Настройки темы',
        'menu_title'  => 'Настройки темы',
        'menu_slug'   => 'theme_settings',
        'redirect'    => false
    ));

    acf_add_options_sub_page(array(
        'page_title'  => 'Логотипы',
        'menu_title'  => 'Логотипы',
        'parent_slug' => 'theme_settings',
        'menu_slug'   => 'theme_settings_logo',
    ));

    acf_add_options_sub_page(array(
        'page_title'  => 'Социальные сети',
        'menu_title'  => 'Социальные сети',
        'parent_slug' => 'theme_settings',
        'menu_slug'   => 'theme_settings_social',
    ));
}

Дополнительные плюшки

admin