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

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

Почему стоит использовать ACF для комплексных форм в WordPress

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

Преимущества ACF:

  • Интуитивный интерфейс для создания полей без кода.
  • Поддержка повторяющихся групп полей (Repeater) и гибких контент-блоков (Flexible Content).
  • Условия отображения полей — показывайте поля только там, где нужно.
  • Возможность добавления пользовательской валидации и сохранения данных.
  • Совместимость с REST API и кастомными типами записей.

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

Создание комплексной формы с повторяющимися полями и условным выводом

Рассмотрим пример: нам нужно сделать форму для записи «Проекты», где можно добавлять несколько этапов проекта с названием, описанием и датой. При этом некоторые поля должны отображаться только при выполнении условий.

Шаг 1. Создаем группу полей в ACF

В админке WordPress установите и активируйте плагин Clearfy Pro (если хотите расширить функционал) и сам ACF (бесплатно или Pro).

В разделе ACF создайте новую группу полей «Этапы проекта».

  • Repeater поле «Этапы» с подполями:
    • Текстовое поле «Название этапа»
    • Текстовая область «Описание»
    • Дата «Дата завершения»
  • Поле «Статус этапа» (выбор) с опциями: «В работе», «Завершен».

Добавьте условие отображения: поле «Дата завершения» показывать только если «Статус этапа» равен «Завершен».

Шаг 2. Привязка к типу записи и вывод в шаблоне

Привяжите группу полей к типу записи «Проекты» (custom post type), который можно создать так:

function 2wp_register_cpt_project() {
    $args = [
        'labels' => [ 'name' => 'Проекты', 'singular_name' => 'Проект' ],
        'public' => true,
        'has_archive' => true,
        'supports' => ['title', 'editor', 'thumbnail'],
    ];
    register_post_type('project', $args);
}
add_action('init', '2wp_register_cpt_project');

В шаблоне single-project.php выведите данные так:

if( have_rows('etapy') ) :
    echo '<ul class="project-stages">';
    while( have_rows('etapy') ) : the_row();
        $name = get_sub_field('nazvanie_etapa');
        $desc = get_sub_field('opisanie');
        $date = get_sub_field('data_zaversheniya');
        $status = get_sub_field('status_etapa');
        echo '<li>';
        echo '<h3>' . esc_html($name) . ' (' . esc_html($status) . ')</h3>';
        if($status === 'Завершен' && $date) {
            echo '<time>' . esc_html($date) . '</time>';
        }
        echo '<p>' . esc_html($desc) . '</p>';
        echo '</li>';
    endwhile;
    echo '</ul>';
endif;

Добавление фронтенд-формы для ввода данных с помощью ACF Frontend Form

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

Пример создания формы добавления проекта с этапами

Добавьте в шаблон или страницу этот код:

function 2wp_display_project_form() {
    if ( ! is_user_logged_in() ) {
        echo '<p>Пожалуйста, войдите, чтобы добавить проект.</p>';
        return;
    }
    acf_form([
        'post_id' => 'new_post',
        'new_post' => [
            'post_type' => 'project',
            'post_status' => 'publish'
        ],
        'field_groups' => [123], // ID группы полей ACF для этапов
        'submit_value' => 'Добавить проект',
        'return' => get_permalink()
    ]);
}
add_shortcode('2wp_project_form', '2wp_display_project_form');

Теперь можно вставить шорткод [2wp_project_form] в страницу, и пользователи увидят полноценную форму с повторяющимися полями для этапов.

Валидация и обработка данных ACF форм

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

Например, проверим, что у каждого этапа дата завершения не меньше даты начала (если есть начало):

add_filter('acf/validate_value/name=data_zaversheniya', function($valid, $value, $field, $input) {
    if (!$valid) return $valid;
    // Получаем индекс повторителя из имени поля
    if (preg_match('/etapy_\d+_data_zaversheniya/', $input)) {
        // Логика проверки даты
        // Пример: запрещаем дату в прошлом
        if (strtotime($value) < time()) {
            return 'Дата завершения не может быть в прошлом';
        }
    }
    return $valid;
}, 10, 4);

Это позволит вывести ошибку рядом с полем без потери данных.

Оптимизация и расширение функционала с помощью плагинов WPShop

Для повышения удобства управления контентом и SEO можно использовать Clearfy Pro — этот плагин поможет убрать лишние функции, ускорить загрузку и улучшить безопасность. Также полезны могут быть плагины для кастомного пагинационного навигатора ABC Pagination при выводе большого количества проектов и их этапов.

Для интеграции с редактором Gutenberg можно использовать ACF Blocks, чтобы создать кастомные блоки для отображения и ввода данных проектов.

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

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

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

Дополнительно рассмотрите расширение функционала с помощью плагинов из WPShop.ru, чтобы сделать сайт быстрее, удобнее и безопаснее.

Как добавить собственные виджеты в WordPress
24.11.2025
Использование Advanced Custom Fields для создания комплексных форм в WordPress
21.02.2026
Как удалить метаданные из изображений в WordPress для ускорения сайта
14.12.2025
Как использовать хуки для изменения функционала WordPress
17.11.2025
Автоматическое удаление спам-комментариев в WordPress
26.01.2026