acf_form()
Отображает форму для добавления/редактирования записей (постов).
Форму можно также зарегистрировать с помощью функции acf_register_form().
Использование кода в модальном окне AJAX
При отображении формы ACF в модальном окне AJAX (или любом другом динамически добавляемом методе) обратите внимание, что для этой страницы потребуется дополнительный код PHP и JavaScript.
-
PHP
Следующие функции должны быть запущены в теле странице (в теге <body>) или с использованием хука wp_footer. Данная функция создаст скрытые WYSIWYG поля, которые необходимы для JS шаблонов и подключения WP media всплывающих окон// Enqueue uploadedr scripts. acf_enqueue_uploader();
-
JS
Следующий JS должен быть запущен после завершения запроса AJAX и добавления нового HTML (содержащего форму ACF) в DOM. Это позволит ACF инициализировать поля во вновь добавленном HTML.// Trigger the append action and provide the newly appended jQuery element. acf.do_action( 'append', $('#popup-id') );
acf_form_head()
Важно отметить, что хоть эта функция и отображает форму, она не обрабатывает форму при отправке. Эту задачу выполняет другая функция: acf_form_head(). Чтобы форма могла сохранять данные, вам нужно будет разместить функцию acf_form_head() в верхней части шаблона страницы до того, как будет отображаться HTML.
Безопасность
Начиная с версии 5.6.5, ACF использует функцию wp_kses_post() для очистки содержимого и удаления вредоносных сценариев. При необходимости эту очистку можно отключить, изменив настройку kses
формы на false.
Хуков нет.
Возвращает
null
. Ничего.
Использование
<?php acf_form( $settings ); ?>
- $settings(int/массив)
Массив настроек или id зарегистрированной формы. Массив может содержать следующие ключи:
$settings = [ 'id' => 'acf-form', 'post_id' => false, 'new_post' => false, 'field_groups' => false, 'fields' => false, 'post_title' => false, 'post_content' => false, 'form' => true, 'form_attributes' => array(), 'return' => '', 'html_before_fields' => '', 'html_after_fields' => '', 'submit_value' => __("Update", 'acf'), 'updated_message' => __("Post updated", 'acf'), 'label_placement' => 'top', 'instruction_placement' => 'label', 'field_el' => 'div', 'uploader' => 'wp', 'honeypot' => true, 'html_updated_message' => '<div id="message" class="updated"><p>%s</p></div>', 'html_submit_button' => '<input type="submit" class="acf-button button button-primary button-large" value="%s" />', 'html_submit_spinner' => '<span class="acf-spinner"></span>', 'kses' => true ]
-
id(строка)
Уникальны идентификатор формы.
По умолчанию: acf-form -
post_id(Integer|String)
ID поста используется для определения полей, которые будут показаны, данные которых будут показаны и обновлены. По умолчанию используется ID текущего поста. Также может быть определено как new_post для создания нового поста при сохранении.- Если указать user_52, то сохранение полей будет для пользователя с ID=52.
- Если указать my_options, another_key и так далее, то есть всё что угодно, кроме описанных выше вариантов, то сохранение будет идти в опцию. Например мы указали my_options и есть поле my_field, то значение будет сохранено в опцию под ключом my_options_my_field.
По умолчанию: false
-
new_post(массив)
Если предыдущий аргумент определен как “new_post”, эта настройка используется для создания нового поста. Доступные параметры смотрите у функции wp_insert_post.
По умолчанию: false -
field_groups(массив)
Массив идентификаторов ID/ ключей групп полей для переопределения полей, отображаемых в этой форме.
По умолчанию: false -
fields(массив)
Массив идентификаторов полей ID/ ключей для переопределения полей, отображаемых в этой форме.
По умолчанию: false -
post_title(Boolean)
Требуется ли отображать поле title (заголовок) поста в форме.
По умолчанию: false -
post_content(Boolean)
Отображать ли поле content (содержание поста), поле отображается в форме встроенного редактора WP.
По умолчанию: false -
form(Boolean)
Нужно ли создавать элементы формы. Используется при добавлении к существующей форме.
По умолчанию: true -
form_attributes(массив)
Массив или HTML аттрибуты для элемента формы.
По умолчанию: array() -
return(строка)
URL переадресации после отправки формы. По умолчанию текущий URL с параметрами GET '?updated=true'.
Специальный параметр '%post_url%' будет преобразован в ссылку на пост.
Специальный параметр '%post_id%' будет преобразован в ID поста.
По умолчанию: '' -
html_before_fields(строка)
Дополнительный HTML для добавления перед полями.
По умолчанию: '' -
html_after_fields(строка)
Дополнительный HTML ля добавления после полей.
По умолчанию: '' -
submit_value(строка)
Текст подписи кнопки для отправки поста.
По умолчанию: __("Update", 'acf') -
updated_message(строка)
Сообщение, отображаемое над формой после отправки. Может быть установлено значение false, если сообщение отсутствует.
По умолчанию: __("Post updated", 'acf') -
label_placement(строка)
Определяет расположение меток полей по отношению к полям. Возможные варианты «top» (сверху над полями) или «left» (слева рядом с полями).
По умолчанию: 'top' -
instruction_placement(строка)
Определяет, где размещаются инструкции для полей. Выбор «label» (под ярлыками) или «field» (под полями).
По умолчанию: 'label' -
field_el(строка)
Определяет элементы для обертки полей. Возможные варианты 'div', 'tr', 'td', 'ul', 'ol', 'dl'.
По умолчанию: 'div' -
uploader(строка)
Использовать встроенный WP uploader или базовый input для полей image (картинка) и file (файл). Варианты 'wp' или 'basic'.
По умолчанию: 'wp' -
honeypot(Boolean)
Требуется ли добавлять скрытые поля для предотварщения отправки формы ботами.
По умолчанию: true -
html_updated_message(строка)
HTML для отображения сообщения об обновлении.
По умолчанию: '<div id="message" class="updated"><p>%s</p></div>' -
html_submit_button(строка)
HTML отображения кнопки отправки.
По умолчанию: '<input type="submit" class="acf-button button button-primary button-large" value="%s" />' -
html_submit_spinner(строка)
HTML отображение спиннера загрузки для кнопки отправки.
По умолчанию: '<span class="acf-spinner"></span>' - kses(Boolean)
Требуется ли выполнить санитайзинг всех данных $_POST функцией wp_kses_post().
По умолчанию: true
-
Примеры
#1 Редактирование простого поста
Этот пример демонстрирует, как отобразить базовую форму для редактирования простого поста.
<?php acf_form_head(); ?> <?php get_header(); ?> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <?php while ( have_posts() ) : the_post(); ?> <?php acf_form(); ?> <?php endwhile; ?> </div><!-- #content --> </div><!-- #primary --> <?php get_sidebar(); ?> <?php get_footer(); ?>
#2 Изменить заголовок если он активирован (label, placeholder и instructions)
Если в форме присутствует параметр 'post_title' => true
, параметр активирует заголовок поста, он имеет такой вид:
в данном случае, чтобы исправить ситуацию можно применить хук acf/load_field/name=_post_title
add_filter( 'acf/load_field/name=_post_title', 'air_post_title_acf_name' ); /** * Изменяет label, placeholder и инструкцию для поля заголовка в ACF форме. * * Этот фильтр применяется к полю заголовка проекта, чтобы изменить его * отображаемые параметры, такие как label, placeholder и instructions. * * @param array $field Массив данных поля ACF. * @return array Измененный массив данных поля ACF. */ function air_post_title_acf_name( $field ) { $field['label'] = 'Введите заголовок поста'; $field['placeholder'] = 'Заголовок поста — это как воздух, без него никуда!'; $field['instructions'] = 'Обязательно укажите название вашего поста, иначе он останется безымянным как призрак.'; return $field; }
В итоге на выходе получаем такое:
#3 Редактирование специфичных полей поста
Этот пример демонстрирует, как отобразить форму, которая редактирует метаполя поста.
<?php acf_form_head(); ?> <?php get_header(); ?> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <?php while ( have_posts() ) : the_post(); ?> <?php acf_form(array( 'post_id' => 123, 'post_title' => false, 'post_content' => false, 'submit_value' => __('Update meta') )); ?> <?php endwhile; ?> </div><!-- #content --> </div><!-- #primary --> <?php get_sidebar(); ?> <?php get_footer(); ?>
#4 Создание специального поста
В этом примере показано, как создать новый специальный пост с отправкой формы.
<?php acf_form_head(); ?> <?php get_header(); ?> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <?php while ( have_posts() ) : the_post(); ?> <?php acf_form(array( 'post_id' => 'new_post', 'new_post' => array( 'post_type' => 'event', 'post_status' => 'publish' ), 'submit_value' => 'Create new event' )); ?> <?php endwhile; ?> </div><!-- #content --> </div><!-- #primary --> <?php get_sidebar(); ?> <?php get_footer(); ?>
Код acf_form() acf form ACF 6.0.4
function acf_form( $args = array() ) { acf()->form_front->render_form( $args ); }