Совместимость с ACF
Пока ACF активен
Пока активен ACF (ACF PRO или Secure Custom Fields), WP Freeform Fields ему не мешает:
- функции с именами ACF не объявляются, хуки
acf/…не вызываются; - папки
acf-jsonне читаются, а блоки, у которых вblock.jsonтолько ключacf, остаются за ACF; - уведомление в админке подсказывает, как завершить переход.
Без ACF
Слой совместимости включён. Отключается константой WPFF_ACF_COMPAT или фильтром wpff/acf_compat.
- Функции объявляются на
setup_theme, доfunctions.phpтемы. Если тема несёт свою копию ACF, они не объявляются вовсе, чтобы её ACF загрузился (фильтрwpff/theme_bundles_acf). - Хуки: каждый из них срабатывает как
wpff/…, затем какacf/…, с аргументами как в ACF и вариантами/type=,/name=,/key=, где они есть у ACF:init,include_fields,load_field,load_value,format_value,update_value,validate_value,prepare_field,load_field_groups,save_post,pre_save_post,submit_form,settings/{имя},fields/{post_object|relationship|page_link|taxonomy|user}/query,input/admin_enqueue_scripts. Во времяacf/save_postв$_POST['acf']лежат отправленные значения, как ожидают обработчики ACF. - Дополнительные функции:
get_field_objects(),acf_get_field(),acf_get_fields(),acf_get_field_group(),acf_get_field_groups(),acf_add_local_field(),update_sub_field(),delete_sub_field(),acf_esc_html(),acf_get_options_page(),acf_get_options_pages(),acf_form_head(),acf_form(). Версии с префиксом:wpff_get_field_objects(),wpff_get_field_settings(),wpff_get_group_fields(),wpff_get_field_groups(),wpff_update_sub_field(),wpff_delete_sub_field(). - Сырые значения (
get_field( $name, $id, false ),get_fields( $id, false )) имеют форму как в ACF: значения Group, Repeater и Flexible Content — с ключами полей, пустые строки —false. - До переноса группы полей и страницы настроек из таблиц ACF читаются оттуда (только чтение,
sourceравенacf). Отключается фильтромwpff/read_acf_groups. Список кешируется в транзиенте, который меняется вместе с группами ACF. - ACF to REST API: пока плагин
acf-to-rest-apiактивен, а ACF нет, его маршрутыacf/v3/{rest_base}/{id}[/{field}]иacf/v3/options/{id}[/{field}]и свойствоacfвwp/v2обслуживает WP Freeform Fields. Отдаются только поля групп, показанных на объекте, — никакой другой меты и опций; поля Password не отдаются. Записи, рубрики и пользователи видны по правилам REST API ядра. Поля страниц настроек требуют права страницы, если их группа не показана в REST; фильтрwpff/acf_to_rest_api/public_optionsделает их публичными, как в оригинале. Фильтр:wpff/emulate_acf_to_rest_api.
Формы на сайте
acf_form() принимает настройки ACF: id, post_id ('new_post' вместе с new_post создаёт запись), field_groups, fields, post_title, post_content, return (%post_id%, %post_url%), html_before_fields, html_after_fields, submit_value, updated_message, honeypot, kses и другие. Отправка сохраняется на template_redirect, поэтому acf_form_head() не обязателен.
Настройки формы передаются подписанными: посетитель не может направить форму на другую запись. Как и в ACF, кто видит форму, решает шаблон. Проверка выполняется на сервере, отклонённые поля подсвечиваются на возвращённой странице.
См. также Отличия от ACF.