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

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

Почему стоит выбрать Advanced Custom Fields для сложных форм в WordPress

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

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

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

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

Один из самых востребованных вариантов — создание повторяющихся блоков, например, для добавления списка сотрудников, проектов или FAQ с несколькими пунктами.

Для начала создайте новую группу полей в админке ACF и добавьте поле типа "Повторитель" (Repeater). Внутри него можно добавить любые дочерние поля, например:

  • Текстовое поле - имя сотрудника
  • Текстовое поле - должность
  • Изображение - фото сотрудника
  • Текстовое поле - контактный телефон

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

Вывод повторяющихся полей в шаблоне

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

if( have_rows('wppuzzle_sotrudniki') ):
    echo '<ul>';
    while ( have_rows('wppuzzle_sotrudniki') ) : the_row();
        $name = get_sub_field('wppuzzle_name');
        $position = get_sub_field('wppuzzle_position');
        $photo = get_sub_field('wppuzzle_photo');
        $phone = get_sub_field('wppuzzle_phone');

        echo '<li>';
        if( $photo ) {
            echo '<img src="' . esc_url($photo['url']) . '" alt="' . esc_attr($photo['alt']) . '" />';
        }
        echo '<strong>' . esc_html($name) . '</strong> - ' . esc_html($position) . '<br>';
        echo 'Телефон: ' . esc_html($phone);
        echo '</li>';
    endwhile;
    echo '</ul>';
else :
    echo 'Сотрудники не добавлены.';
endif;

В этом коде мы проверяем наличие строк в повторителе, затем выводим каждое поле с безопасной экранировкой.

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

Гибкий контент (Flexible Content) позволяет создавать формы с разными типами блоков, которые редактор может добавлять в любом порядке. Это удобно для построения сложных страниц с разнообразными элементами: тексты, изображения, слайдеры, таблицы и т.д.

Создайте поле типа "Гибкий контент" и добавьте несколько макетов. Например:

  • Текстовый блок с заголовком и параграфом
  • Галерея изображений
  • Видео-блок с ссылкой на видео

Каждый макет содержит собственный набор полей.

Пример вывода гибкого контента в шаблоне

if( have_rows('wppuzzle_flexible_content') ):
    while ( have_rows('wppuzzle_flexible_content') ) : the_row();

        if( get_row_layout() == 'text_block' ):
            $title = get_sub_field('wppuzzle_title');
            $content = get_sub_field('wppuzzle_content');
            echo '<h2>' . esc_html($title) . '</h2>';
            echo '<p>' . esc_html($content) . '</p>';

        elseif( get_row_layout() == 'gallery_block' ):
            $images = get_sub_field('wppuzzle_gallery');
            if( $images ) {
                echo '<div class="gallery">';
                foreach( $images as $image ) {
                    echo '<img src="' . esc_url($image['url']) . '" alt="' . esc_attr($image['alt']) . '" />';
                }
                echo '</div>';
            }

        elseif( get_row_layout() == 'video_block' ):
            $video_url = get_sub_field('wppuzzle_video_url');
            echo '<div class="video-container"><iframe src="' . esc_url($video_url) . '" frameborder="0" allowfullscreen></iframe></div>';

        endif;

    endwhile;
else :
    echo 'Контент отсутствует.';
endif;

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

Автоматизация и расширение функционала с помощью пользовательских функций

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

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

function wppuzzle_display_sotrudniki() {
    if( have_rows('wppuzzle_sotrudniki') ) {
        echo '<ul>';
        while ( have_rows('wppuzzle_sotrudniki') ) : the_row();
            $name = get_sub_field('wppuzzle_name');
            $position = get_sub_field('wppuzzle_position');
            $photo = get_sub_field('wppuzzle_photo');
            $phone = get_sub_field('wppuzzle_phone');

            echo '<li>';
            if( $photo ) {
                echo '<img src="' . esc_url($photo['url']) . '" alt="' . esc_attr($photo['alt']) . '" />';
            }
            echo '<strong>' . esc_html($name) . '</strong> - ' . esc_html($position) . '<br>';
            echo 'Телефон: ' . esc_html($phone);
            echo '</li>';
        endwhile;
        echo '</ul>';
    } else {
        echo 'Сотрудники не добавлены.';
    }
}

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

Поддержка и интеграция с другими плагинами

ACF легко интегрируется с популярными плагинами, например с WPRemark для отзывов или с темой Reboot для удобного вывода данных. Это позволяет создавать мощные кастомные решения без лишних затрат времени на разработку.

Заключение по теме комплексных форм с ACF

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

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

Как удалить или заблокировать удалённый пользователь в WordPress с помощью кода
30.12.2025
Как удалить битые ссылки в WordPress: практическое руководство
07.05.2026
Как удалить автоматические вариации в WooCommerce: практическое руководство
16.05.2026
Оптимизация AJAX-запросов в WordPress: практические советы и примеры кода
13.11.2025
Как создать плагин для WordPress с настройками
19.11.2025