Как использовать Advanced Custom Fields для создания сложных форм в WordPress

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

Что такое Advanced Custom Fields и зачем он нужен

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

Основные преимущества ACF:

  • Интуитивно понятный интерфейс в админке.
  • Поддержка множества типов полей.
  • Гибкость: можно создавать как простые, так и комплексные формы.
  • Возможность вывода полей в шаблонах с помощью простых функций.

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

Создание сложных форм с повторяющимися группами полей (Repeater Field)

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

Настройка поля Repeater в ACF

1. Установите и активируйте плагин Clearfy Pro для улучшения производительности сайта, если нужно (не обязательно).

2. В админке WordPress перейдите в меню "Пользовательские поля" -> "Добавить новую".

3. Создайте новую группу полей, например, "Контакты компании".

4. Добавьте поле типа Repeater, например, с названием "Адреса офисов".

5. Внутри Repeater добавьте поля, например:

  • Текстовое поле "Город"
  • Текстовое поле "Улица"
  • Телефон
  • Email

6. Настройте условия отображения группы полей, например, чтобы она выводилась только на страницах с шаблоном "Контакты".

Пример вывода данных Repeater в шаблоне

<?php
function wpsetup_get_company_addresses() {
    if( have_rows('adres_offisov') ):
        echo '<ul>';
        while ( have_rows('adres_offisov') ) : the_row();
            $city = get_sub_field('gorod');
            $street = get_sub_field('ulitsa');
            $phone = get_sub_field('telefon');
            $email = get_sub_field('email');
            echo '<li>';
            echo '<strong>' . esc_html($city) . '</strong>, ' . esc_html($street) . '<br>';
            echo 'Телефон: ' . esc_html($phone) . '<br>';
            echo 'Email: <a href="mailto:' . esc_attr($email) . '">' . esc_html($email) . '</a>';
            echo '</li>';
        endwhile;
        echo '</ul>';
    else :
        echo '<p>Адреса не заданы.</p>';
    endif;
}
?>

Вызовите функцию wpsetup_get_company_addresses() в нужном месте шаблона, чтобы вывести список офисов.

Использование условной логики в полях ACF для динамического отображения

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

Пример: выбор типа контакта

Создадим поле выбора "Тип контакта" с вариантами: "Email", "Телефон", "Адрес". В зависимости от выбора будет отображаться соответствующее поле ввода.

1. Создайте поле выбора (Select) "Тип контакта".

2. Создайте поля для email, телефона и адреса.

3. Для каждого поля задайте условие отображения: показывать только если "Тип контакта" равен соответствующему значению.

Обработка данных в шаблоне

<?php
function wpsetup_display_contact() {
    $type = get_field('tip_kontakta');
    if( $type === 'email' ) {
        $email = get_field('email');
        echo '<p>Email для связи: <a href="mailto:' . esc_attr($email) . '">' . esc_html($email) . '</a></p>';
    } elseif( $type === 'telefon' ) {
        $phone = get_field('telefon');
        echo '<p>Телефон: ' . esc_html($phone) . '</p>';
    } elseif( $type === 'adres' ) {
        $address = get_field('adres');
        echo '<p>Адрес: ' . esc_html($address) . '</p>';
    } else {
        echo '<p>Контактные данные не указаны.</p>';
    }
}
?>

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

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

Очень часто сложные формы нужны не только для стандартных постов и страниц, но и для пользовательских типов записей (Custom Post Types, CPT). ACF отлично с этим справляется.

Пример: добавление полей к CPT "Проекты"

1. Зарегистрируйте CPT "Проекты" с помощью функции register_post_type() или плагина.

2. Создайте группу полей ACF и привяжите её к типу записи "Проекты".

3. Добавьте необходимые поля, например:

  • Дата начала (Date Picker)
  • Дата окончания (Date Picker)
  • Статус проекта (Select)
  • Список участников (Repeater с текстовыми полями)

Вывод данных в шаблоне single-project.php

<?php
function wpsetup_display_project_info() {
    $start_date = get_field('data_nachala');
    $end_date = get_field('data_okonchaniya');
    $status = get_field('status_proekta');

    echo '<p><strong>Период:</strong> ' . esc_html($start_date) . ' - ' . esc_html($end_date) . '</p>';
    echo '<p><strong>Статус:</strong> ' . esc_html($status) . '</p>';

    if( have_rows('uchastniki') ) {
        echo '<h3>Участники проекта</h3><ul>';
        while ( have_rows('uchastniki') ) : the_row();
            $name = get_sub_field('imya');
            echo '<li>' . esc_html($name) . '</li>';
        endwhile;
        echo '</ul>';
    }
}
?>

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

Полезные советы и рекомендации по работе с ACF

  • Используйте функции с префиксом: для избежания конфликтов с другими плагинами и темами всегда добавляйте префикс, например wpsetup_, к своим функциям.
  • Кэшируйте результаты: если в шаблоне выводите много полей, рассмотрите возможность кэширования данных для ускорения загрузки страниц.
  • Оптимизируйте формы: не добавляйте лишних полей, используйте условную логику, чтобы пользователь видел только актуальные опции.
  • Интеграция с REST API: ACF поддерживает добавление пользовательских полей в REST API WordPress, что полезно для Headless CMS и SPA.

Заключение

Advanced Custom Fields — мощный и гибкий инструмент для создания сложных форм и расширения функционала WordPress без глубоких знаний PHP. Используя повторяющиеся поля, условную логику и интеграцию с CPT, вы сможете реализовать практически любые задачи по работе с данными.

Если хотите ускорить работу с ACF и оптимизировать сайт, рекомендуем обратить внимание на Clearfy Pro — плагин для оптимизации и ускорения WordPress.

Как отключить автозапуск редактора Gutenberg в WordPress
06.02.2026
Автоочистка базы данных WordPress от несуществующих записей: эффективные методы и примеры
04.03.2026
Как использовать REST API для автоматизации задач в WordPress
22.01.2026
Как использовать WP Background Processing в WordPress для обработки задач в фоне
30.03.2026
Как создать настройку автообновления плагинов WordPress с контролем и уведомлениями
01.03.2026