Как добавить динамические поля в формы WordPress с помощью ACF

В современных проектах на WordPress часто возникает задача добавить в формы динамические поля, которые зависят от контекста страницы, пользователя или других параметров. Плагин Advanced Custom Fields (ACF) отлично подходит для создания и управления пользовательскими полями, но не все знают, как сделать эти поля динамическими и интегрировать их непосредственно в формы на сайте.

Что такое динамические поля в ACF и зачем они нужны

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

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

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

Как создать и настроить поля ACF для динамического вывода

Первым шагом необходимо создать группу полей в ACF. Это можно сделать через административную панель WordPress: Custom Fields > Add New.

Например, создадим поле «Дополнительная информация» типа Text. Данное поле мы хотим автоматически заполнять значением в зависимости от текущего пользователя.

Важно правильно выбрать условия отображения (Location Rules) для группы полей, чтобы они отображались там, где вам нужно — на страницах, записях или пользовательских типах записей.

Пример: Автоматическое заполнение поля значением

Для динамического присвоения значения полю можно использовать фильтр acf/load_value. Вот пример кода, который подставляет email текущего пользователя в поле при загрузке формы:

function wp_shablon_acf_load_value_dynamic_email($value, $post_id, $field) {
    if (!$value) {
        $current_user = wp_get_current_user();
        if ($current_user->exists()) {
            $value = $current_user->user_email;
        }
    }
    return $value;
}
add_filter('acf/load_value/name=additional_info', 'wp_shablon_acf_load_value_dynamic_email', 10, 3);

В этом коде мы проверяем, есть ли текущее значение поля, если нет — подставляем email пользователя.

Динамические выпадающие списки в ACF с использованием фильтров

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

Например, вывести список категорий WooCommerce или пользовательские данные из базы.

Для этого используется фильтр acf/load_field. Рассмотрим пример создания динамического списка постов кастомного типа:

function wp_shablon_acf_load_field_dynamic_select($field) {
    $posts = get_posts(array(
        'post_type' => 'product',
        'numberposts' => -1
    ));
    $field['choices'] = array();
    if ($posts) {
        foreach ($posts as $post) {
            $field['choices'][$post->ID] = $post->post_title;
        }
    }
    return $field;
}
add_filter('acf/load_field/name=product_select', 'wp_shablon_acf_load_field_dynamic_select');

В результате поле с именем product_select будет содержать список всех товаров для выбора.

Интеграция динамических полей ACF в пользовательские формы

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

Для этого можно использовать функцию acf_form(), которая выводит форму с ACF полями и автоматически сохраняет данные.

Пример простейшего вывода формы с динамическим полем:

function wp_shablon_render_acf_form() {
    acf_form(array(
        'post_id' => 'user_'.get_current_user_id(),
        'field_groups' => array(123), // ID группы полей
        'submit_value' => 'Сохранить'
    ));
}
add_shortcode('wp_shablon_acf_form', 'wp_shablon_render_acf_form');

Такую форму можно вставлять в записи или страницы через шорткод [wp_shablon_acf_form].

Обработка динамических данных перед сохранением

Иногда нужно изменить данные перед их сохранением. Для этого используется фильтр acf/update_value. Например, чтобы автоматически добавить к тексту дату:

function wp_shablon_acf_update_value_add_date($value, $post_id, $field) {
    $value .= ' (обновлено: '.date('d.m.Y').')';
    return $value;
}
add_filter('acf/update_value/name=additional_info', 'wp_shablon_acf_update_value_add_date', 10, 3);

Таким образом вы можете контролировать и модифицировать пользовательские данные перед сохранением.

Полезные плагины для работы с ACF и динамическими формами

Для расширения возможностей ACF и удобной работы с формами рекомендуем обратить внимание на следующие плагины:

  • ACF Extended — добавляет множество дополнительных функций и удобств к стандартному ACF.
  • Gravity Forms ACF Integration — интеграция Gravity Forms с ACF для сложных форм с динамическими полями.
  • WP User Frontend — позволяет создавать фронтенд-формы с поддержкой ACF.

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

Советы по оптимизации и отладке динамических полей в ACF

При работе с динамическими полями важно учитывать производительность и удобство поддержки кода. Вот несколько рекомендаций:

  • Используйте кеширование результатов запросов, если динамические данные формируются из базы или внешних API.
  • Проверяйте наличие данных перед выводом, чтобы избежать ошибок.
  • Пишите функции с префиксом, связным с вашим проектом (как в примерах wp_shablon_), чтобы избежать конфликтов.
  • Тестируйте работу форм под разными ролями пользователей — динамические поля могут зависеть от прав доступа.

Отладку можно провести с помощью стандартных средств WordPress и плагина Query Monitor.

Как использовать мета-записи в WordPress для сохранения дополнительных данных
08.12.2025
Как использовать хуки для создания новых функционалов в WordPress
28.11.2025
Как удалить неиспользуемые метаданные в WordPress
29.01.2026
Как добавить динамические поля в формы WordPress с помощью ACF
12.03.2026
WooCommerce: как быстро использовать хуки для добавления контента в страницы товара
09.05.2026