Плагин Advanced Custom Fields позволяет получить полный контроль над экранами редактирования WordPress и данными настраиваемых полей. Несомненными плюсами плагина являются:

  • возможность легко и быстро добавлять любые поля в конструкторе с помощью нажатия всего пары кнопок;
  • Поля можно добавлять по всему WP, включая сообщения, пользователей, термины таксономии, мультимедиа, комментарии и даже страницы с настраиваемыми параметрами;

  • Загрузку и отображение значений кастомных полей можно реализовать в любом файле шаблона темы, с помощью удобных функций для разработчиков, которые требуют от вас минимума усилий.

Эта статья поможет вам освоить все базовые и продвинутые возможности плагина, а на официальном сайте разработчика вы можете найти достаточно обширное описание не упомянутых функций плагина – вот ссылка.

Содержание скрыть

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

Чтобы вывести текст, область текста, число, файл или медиа, необходимо использовать следующий код:

<?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 из терминов таксономии

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

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

Вывод произвольных полей. Плагин WP Advanced Custom Fields (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 поля, созданные для вкладки профиль пользователя страницы «Пользователи».

Вывод произвольных полей. Плагин WP Advanced Custom Fields (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',
));
}

Кое что еще… Шорткод

ACF есть специальных шоткод , который позволяет выводить значение поля в контенте стать или где-либо еще, где WP обрабатывать шорткоды. Обычно шоткод используется в WYGIWYG-редакторе для отображения значений полей.

ВАЖНО: Шоткод работает только с полями, имеющими текстовые значения.

Использование

Синтаксис шоткода выглядит так:

Шорткод работает аналогично функции the_field().

Примеры

Пример того, как можно использовать шоткод в тексте, чтобы динамически вывести значения полей ACF.

Вывод произвольных полей. Плагин WP Advanced Custom Fields (ACF).

Добавление полей к определенной рубрике

В Advanced Custom Fields из коробки нет условия, чтобы отобразить группу полей на странице редактирования определенной рубрики. В этой заметке мы напишем такие правила.

Вывод произвольных полей. Плагин WP Advanced Custom Fields (ACF).

add_filter( 'acf/location/rule_types', 'acf_location_rules_types', 999 ); 
function acf_location_rules_types( $choices ) {
$key = __('Forms', 'acf');

if ( ! isset( $choices[ $key ] ) ) {
$choices[ $key ] = [];

}

$choices[ $key ]['category_id'] = __( 'Category' );

return $choices;
}

Пока это просто опция, но выбора самих рубрик, что созданы на сайте, нет. Сделаем это в следующем шаге.

Добавляем возможность выбрать конкретную рубрику

Вывод произвольных полей. Плагин WP Advanced Custom Fields (ACF).
add_filter( 'acf/location/rule_values/category_id', 'acf_location_rules_values_category' );
function acf_location_rules_values_category( $choices ) {
$terms = get_terms( 'category', [ 'hide_empty' => false ] );

if ( $terms && is_array( $terms ) ) {
foreach ( $terms as $term ) {
$choices[ $term->term_id ] = $term->name;
}
}

return $choices;
}

Теперь опция в выпадающем списке имеет список всех наших рубрик. Писать функционал сохранения значения не нужно, ACF сделает это за нас. Теперь нужно “рассказать” ACF, где выводить форму.

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

Вывод произвольных полей. Плагин WP Advanced Custom Fields (ACF).

Мы добавили нужные данные в выпадающий список, наш выбор сохраняется, но что делать с сохраненными данными ACF не знает. Расскажем ему:

add_filter( 'acf/location/rule_match/category_id', 'acf_location_rules_match_category', 10, 3 ); 
function acf_location_rules_match_category( $match, $rule, $options ) {
$screen = get_current_screen();

if ( $screen->base !== 'term' || $screen->id !== 'edit-category' ) {
return $match;
}

$term_id = $_GET['tag_ID'];
$selected_term = $rule['value'];

if ( $rule['operator'] == '==' ) {
$match = ( $selected_term == $term_id );
} elseif ( $rule['operator'] == '!=' ) {
$match = ( $selected_term != $term_id );
}

return $match;
}

Данный код проверяет, находимся ли мы на странице редактирования указанной в опции рубрики или нет. Если Да, то возвращаем true и форма отображается. Также предусмотрели ситуацию, когда в опциях при составлении условия указано “Не равно”.

На этом можно было бы и закончить, но есть проблема: некоторые поля работают по ajax (файл, изображение и т.д.). При ajax запросах нет некоторых глобальных переменных, которые нужны нашему коду, из-за этого в лог сыпятся ошибки. Поэтому нужно проверить, если это админка и не ajax запрос – применить наш код:

if ( is_admin() && ! wp_doing_ajax() ) { 

// Наш код

}

Далее остается только вывести содержимое полей для рубрики в нужном месте шаблона. Если шаблон для рубрик общий, то воспользуйтесь условным тегом is_category().

Полный код из статьи можно найти здесь: https://gist.github.com/campusboy87/b7b1211f8abd4438ae919977f3dcd4a0

Добавление полей к терминам таксономии

В этом гайде рассмотрим процесс создание произвольных полей для терминов любой таксономии и вывода их значений в шаблоне темы.

Терминами могут быть рубрики (категории), метки (теги) или произвольной таксономии, к примеру рубрики товаров WooCommerce, их атрибуты и так далее.

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

С помощью Advanced Custom Fields добавлять произвольные поля для терминов таксономий очень просто, вот что нужно сделать:

  • В пункте меню “Custom Fields” выбрать подпункт “Add New”, чтобы создать новую группу произвольных полей.
  • Добавьте нужные типы полей, которые хотите видеть при добавлении и редактировании термина.
  • В секции «Locations» выберите условие, чтобы группа полей отображалась для терминов нужной таксономии. К примеру, на скриншоте ниже выбрано условие показа группы полей для рубрик.

Вывод произвольных полей. Плагин WP Advanced Custom Fields (ACF).

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

После того, как группа полей создана и указано, для каких терминов таксономии их показывать, можно при добавлении нового или редактировании старого увидеть наши поля и указать значения. В нашем примере это стандартные рубрики WordPress.

Вывод произвольных полей. Плагин WP Advanced Custom Fields (ACF).

Отображение значений полей

Чтобы вывести значения полей, нужно отредактировать код шаблона вывода архивной страницы таксономии. Для примера: для рубрик – это category.php, для меток – tag.php, или общий шаблон taxonomy.php/archive.php. В зависимости от использованной темы, вы также можете использовать фильтры или части шаблона для кастомизации.

Настройка HTML-кода для таксономии WordPress может быть легко выполнена путем редактирования файла category.php, tag.php или taxonomy.php в использованной теме. В зависимости от вашей темы вы также можете использовать шаблонные части или фильтры для настройки HTML.

В рассмотренном случае мы произвольные поля добавили к Рубрикам, поэтому мы будем редактировать файл category.php, используя одну из стандартных тем Twenty Seventeen. В этом шаблоне мы выведем картинку для рубрики сразу после шапки сайта виде бэкграунда и зададим цвет заголовков у постов.

<?php
/**
* Шаблон вывода архивной страницы Рубрики
*
* @link https://wp-kama.ru/id_7654/ierarhiya-fajlov-temy-shablona.html
*
* @package WordPress
* @subpackage Twenty_Seventeen
* @since 1.0
* @version 1.0

*/
get_header();

// Получаем данные текущего термина (рубрики)
$term = get_queried_object();
// Получаем значения произвольных полей

$image = get_field('image', $term);
$color = get_field('color', $term);

?>

<style type="text/css">
.entry-title a {
color:
<?php echo $color; ?>;
}
<?php if( $image ): ?>
.site-header {
background-image: url(
<?php echo $image['url']; ?>);
}
<?php endif; ?>

</style>
<div class="wrap">

<?php // Далее идёт оставшийся код шаблона ?>

Что получается вы можете видеть на картинке ниже:

Вывод произвольных полей. Плагин WP Advanced Custom Fields (ACF).

Вывод полей определенного термина

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

ПримерФорматОписание
category_123$taxonomy . ‘_’ . $term_idСтрока содержит название таксономии и ID термина.
term_123term_’ . $term_idСтрока содержит слово term и ID термина. Добавлено в версии 5.5.0.
WP_Term Объект термина. 

Например, пусть у нас есть тестовое поле с именем my-field у стандартных рубрик WordPress и надо вывести его значение:

// 1 вариант 
the_field('my-field', 'category_123');

// 2 вариант
the_field('my-field', 'term_123');

// 3 вариант
$term = get_term( 123 ); the_field('my-field', $term);

Автовстраивание

Когда вы используете типа поля “Визуальный редактор” (WYSIWYG ) для термина таксономии, то автовстраивание (auto-embed) может не работать. Функция автовстраивания работает только в постах. То есть, если вывести на странице рубрики во фронт-энде контент поля “Визуальный редактор”, в котором есть ссылка на YouTube-ролик, то она не будет преобразована автоматически. Чтобы решить эту проблему используйте следующий код, к примеру, в category.php:

// Переменные 
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;

$GLOBALS['wp_embed']->post_ID = $taxonomy . '_' . $term_id;

Скачать плагин

Из репозитория WordPress:

Advanced Custom Fields

Из админ панели WordPress:

Ищете в поиске Advanced Custom Fields, выглядит так:

Вывод произвольных полей. Плагин WP Advanced Custom Fields (ACF).

Официальный сайт плагина

Официальный сайт плагина с документацией и инструкциями находится здесь.

Альтернативы Advanced Custom Fields

JetEngine

JetEngine является одной из лучших функциональных альтернатив ACF. Однако вам необходимо использовать Elementor для использования JetEngine, поскольку он разработан специально для него. Вы можете использовать это расширение не только для создания настраиваемых полей, но и других настраиваемых типов содержимого, включая настраиваемые типы сообщений, настраиваемые таксономии, настраиваемые формы, элементы списка, динамический календарь, динамическую галерею и т.д. 

Pods

Pods – бесплатный плагин для создания настраиваемых полей в WordPress. Больше про него особенно нечего сказать, потому что описание укладывается в рамки описания плагина JetEngine. Pods также работает с конструктором блоков Elementor.

Toolset

А вот это уже платная альтернатива для плагина ACF. Бесплатная версия недоступна. Типы настраиваемого содержимого, которое вы можете создать с помощью Toolset, различаются в зависимости от используемого вами плана. Самый дешевый план (69 долларов) позволяет создавать настраиваемые типы сообщений, настраиваемые поля, настраиваемые повторители.

Custom Field Suite и Meta Box

Два бесплатных плагина, повторяющих возможности ACF.

Спасибо что прочитали эту статью до конца!

Автору этой статьи не удалось установить оригинальность прав на текст (или конкретные его части), кроме как с помощью проверки изложенного материала  в открытых сервисах по проверке текста на антиплагиат. Согласно проверке, в статье частично использованы материалы сайтов https://wp-kama.ru, https://only-to-top.ruhttps://dinoil.ru/, https://ru.wordpress.org и других, в объеме, не превышающем 5%. Если вы являетесь правообладателем текста (или его части) и можете это подтвердить, свяжитесь со мной с помощью страницы обратной связи.