Плагин 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 добавьте поля, например:
- Текстовое поле "Город"
- Текстовое поле "Улица"
- Телефон
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.