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, чтобы сделать сайт быстрее, удобнее и безопаснее.