Skip to content

Совместимость с 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.

GPL-2.0-or-later. Проект не связан с ACF и WP Engine.