Плагин Advanced Custom Fields (ACF) является мощным инструментом для расширения возможностей WordPress, позволяя создавать удобные пользовательские поля. В этой статье мы разберёмся, как использовать ACF для создания комплексных форм на сайте, которые можно применять для сбора разнообразных данных, например, заявок, отзывов или персональных настроек.
Почему стоит использовать ACF для форм в WordPress
ACF позволяет создавать не только простые поля, но и сложные структуры с повторяющимися элементами, гибкими контент-блоками и логикой отображения. В отличие от специализированных форменных плагинов, ACF интегрируется напрямую в админку и шаблоны, что даёт полный контроль и минимизирует нагрузку.
Основные преимущества использования ACF для форм:
- Гибкость в настройке полей и групп;
- Поддержка повторяющихся и вложенных полей;
- Лёгкая валидация и обработка данных через PHP;
- Возможность интеграции с пользовательскими типами записей;
- Совместимость с другими плагинами и темами.
Создание комплексной формы с повторяющимися полями
Рассмотрим пример создания формы с повторяющимися группами полей, например, для сбора информации о нескольких контактах пользователя.
Настройка полей ACF
В панели WordPress создаём группу полей с названием "Контакты пользователя" и добавляем поле типа "Повторитель" (Repeater). Внутри повторителя создаём следующие поля:
- Имя (text)
- Телефон (text)
- Email (email)
Устанавливаем правила отображения группы полей там, где нужно — например, на странице с шаблоном формы.
Вывод формы на фронтенде
Чтобы вывести форму на сайте и дать пользователю возможность её заполнить, используем функцию wplinks_acf_render_form(). Ниже пример кода для вывода формы:
function wplinks_acf_render_form() {
if( function_exists('acf_form') ) {
acf_form(array(
'post_id' => 'new_post',
'new_post' => array(
'post_type' => 'contact_form',
'post_status' => 'publish'
),
'field_groups' => array(123), // ID группы полей ACF
'submit_value' => 'Отправить'
));
}
}Вызываем функцию wplinks_acf_render_form() в нужном месте шаблона.
Обработка данных после отправки
ACF автоматически сохранит данные в мета-поля поста. Для дополнительной обработки, например, отправки уведомления, используем хук acf/save_post:
add_action('acf/save_post', 'wplinks_acf_handle_form_submission', 20);
function wplinks_acf_handle_form_submission( $post_id ) {
if ( get_post_type($post_id) !== 'contact_form' ) {
return;
}
$contacts = get_field('contacts', $post_id); // поле повторителя
if ( !empty($contacts) ) {
foreach ($contacts as $contact) {
// логика обработки, например, отправка email
wp_mail($contact['email'], 'Спасибо за заявку', 'Ваши данные получены');
}
}
}Расширение форм с ACF: условные поля и вложенные группы
ACF поддерживает условное отображение полей, что позволяет создавать динамичные интерфейсы. Например, можно показывать дополнительные поля только при выборе определённого варианта в селекте.
Вложенные группы полей упрощают организацию сложных данных и дают возможность структурировать информацию логично и удобно.
Пример условного поля
Создайте поле типа «Выбор» с опциями «Физическое лицо» и «Компания». Для компании добавьте вложенную группу с реквизитами. В настройках поля укажите условие отображения вложенной группы только при выборе «Компания».
Пример вложенной группы
Внутри повторителя добавьте группу «Адрес», которая содержит поля «Улица», «Город», «Почтовый индекс».
Рекомендации по безопасности и валидации
Хотя ACF обеспечивает базовую валидацию, желательно добавить дополнительные проверки для данных, особенно если форма используется для регистрации или приёма платежей.
Для этого можно использовать JavaScript для клиентской валидации и PHP-хуки для серверной проверки. Обязательно проверяйте nonce для защиты от CSRF-атак:
if ( ! isset($_POST['acf_nonce']) || ! wp_verify_nonce($_POST['acf_nonce'], 'acf_form') ) {
wp_die('Ошибка безопасности.');
}Альтернативы и дополнения
Если вам нужна интеграция с внешними сервисами или более сложная логика работы с формами, рассмотрите использование плагинов:
- Clearfy Pro — для оптимизации и безопасности сайта;
- WPRemark — для управления отзывами и комментариями;
- или интегрируйте ACF с
WP REST APIдля создания SPA на React или Vue.
Использование ACF для создания комплексных форм — отличный способ получить гибкий, управляемый и расширяемый функционал с минимальными затратами времени и ресурсов.