Обзор
Эта функция создает элемент <form> для добавления или редактирования поста. Существует множество настроек для управления формой. Они добавляются в массив $options, как описано ниже. Вы также можете зарегистрировать форму, используя функцию acf_register_form().
Параметры
<?php acf_form( $options ); ?>
- $options (строка|массив) (обязательное) либо массив настроек, либо «id» зарегистрированной формы.
$settings = array(
/* (строка) Уникальный идентификатор формы. По умолчанию «acf-form» */
'id' => 'acf-form',
/* (число|строка) ID поста для загрузки и сохранения данных. По умолчанию используется текущий ID поста.
Также может быть установлено значение 'new_post' для создания нового поста при отправке формы. */
'post_id' => false,
/* (массив) Массив данных, используемых для создания нового поста. См. Wp_insert_post для списка доступных параметров.
Вышеупомянутый параметр «post_id» должен содержать значение «new_post». */
'new_post' => false,
/* (массив) Массив id/ключей групп полей для переопределения полей, отображаемых в этой форме */
'field_groups' => false,
/* (массив) Массив id/ключей полей для переопределения полей, отображаемых в этой форме */
'fields' => false,
/* (логический) Показывать или нет текстовое поле для заголовка поста. По умолчанию false */
'post_title' => false,
/* (логический) Показывать или нет wysiwyg редактор для редактирования контента поста. По умолчанию false */
'post_content' => false,
/* (логический) Создавать или нет form элемент. Полезно при добавлении к существующей форме. По умолчанию true */
'form' => true,
/* (массив) Массив HTML атрибутов формы */
'form_attributes' => array(),
/* (строка) URL-адрес, на который будет перенаправление после отправки формы. По умолчанию используется текущий URL с параметром GET '?updated=true'.
Специальный плейсхолдер '%post_url%' будет преобразован в постоянную ссылку на пост (удобно при создании нового поста)
Специальный плейсхолдер '%post_id%' будет преобразован в ID поста (удобно при создании нового поста) */
'return' => '',
/* (строка) Дополнительный HTML, который будет добавлен перед полями */
'html_before_fields' => '',
/* (строка) Дополнительный HTML, который будет добавлен после полей */
'html_after_fields' => '',
/* (строка) Текст кнопки отправки формы */
'submit_value' => __("Обновить", 'acf'),
/* (строка) Сообщение, которое будет выведено перед формой после успешного редиректа. Если установлено false, то сообщение не будет выводиться. */
'updated_message' => __("Пост обновлен", 'acf'),
/* (строка) Определяет, где появится метка относительно поля. По умолчанию «top».
Выбор между «top» (Над полем) или «left» (Рядом с полем) */
'label_placement' => 'top',
/* (строка) Определяет, где появятся инструкция относительно поля. По умолчанию «label».
Выбор между «label» (Под меткой) или «field» (Под полем) */
'instruction_placement' => 'label',
/* (строка) Определяет во, что будет обернуто поле. По умолчанию 'div'
Доступны 'div', 'tr', 'td', 'ul', 'ol', 'dl' */
'field_el' => 'div',
/* (строка) Использовать ли загрузчик WP или обычный input для загрузки изображений и файлов. По умолчанию 'wp'
Выбор между 'wp' или 'basic'. Добавлено в v5.2.4 */
'uploader' => 'wp',
/* (логический) Включить ли скрытое поле ввода для определения ботов. По умолчанию true. Добавлено в v5.3.4 */
'honeypot' => true,
/* (строка) Код HTML, используемый для рендеринга сообщения об обновлении. Добавлено в v5.5.10 */
'html_updated_message' => '<div id="message" class="updated"><p>%s</p></div>',
/* (строка) Код HTML, используемый для рендеринга кнопки отправки формы. Добавлено в v5.5.10 */
'html_submit_button' => '<input type="submit" class="acf-button button button-primary button-large" value="%s" />',
/* (строка) Код HTML, используемый для рендеринга анимации загрузки. Добавлено в v5.5.10 */
'html_submit_spinner' => '<span class="acf-spinner"></span>',
/* (логический) Нужно или нет обрабатывать $_POST данные с помощью функции wp_kses_post(). По умолчанию true. Добавлено в v5.6.5 */
'kses' => true
);
Примечания
acf_form_head()
Важно отметить, что функция acf_form() создает форму, позволяющую вам вводить данные, но она не выполняет логику, необходимую для сохранения данных. Эта логика обрабатывается другой функцией acf_form_head(). Чтобы форма сохранила данные, вам нужно поместить функцию acf_form_head() в начало шаблона страницы до того, как будет обработан любой HTML-код.
<tr>
Если вы используете параметр «field_el» для рендеринга полей в качестве элемента <tr> (табличная строка), помните, что функция acf_form() не создает обертку <table> или <tbody>. Вы можете добавить эти элементы вне функции acf_form() или использовать настройки «html_before_fields» и «html_after_fields».
Примеры
Базовый
В примере показана стандартная форма acf_form для редактирования текущего поста.
<?php acf_form_head(); ?>
<?php get_header(); ?>
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php /* The loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php acf_form(); ?>
<?php endwhile; ?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Редактирование конкретного поста
В этом примере показано, как выбрать конкретный пост, настроить ярлык для кнопки отправки формы и скрыть поле редактирования заголовка поста.
<?php acf_form_head(); ?>
<?php get_header(); ?>
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php /* The loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php acf_form(array(
'post_id' => 123,
'post_title' => false,
'submit_value' => 'Обновить пост!'
)); ?>
<?php endwhile; ?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Создание нового поста
В примере показано, как можно создать новый пост с помощью формы ACF.
<?php acf_form_head(); ?>
<?php get_header(); ?>
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php /* The loop */ ?>
<?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' => 'Создать новый event'
)); ?>
<?php endwhile; ?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
AJAX
Если вы хотите использовать AJAX вместе с acf_form обратите внимание на то, что также необходимо подключить дополнительный PHP / JS код. Это необходиом чтобы ACF знал, что на странице есть новые поля, для которых может потребоваться инициализация JS.
PHP
Добавьте следующий код на страницу внутри элемента <body> и перед событием wp_footer. Это создаст скрытое поле WYSIWYG и подключит необходимый JS код для всплывающих окон WP.
acf_enqueue_uploader();
Javascript
Либо добавьте следующий JS код прямо в HTML, либо запустите этот JS код после добавления AJAX контента. Это позволит ACF инициализировать поля внутри недавно добавленного HTML.
<script type="text/javascript">
(function($) {
// добавляем поля
acf.do_action('append', $('#popup-id'));
})(jQuery);
</script>
Безопасность
Начиная с версии 5.6.5, ACF использует функцию wp_kses_post() для очистки контента и удаления «злых» скриптов. Эта очистка может быть отключена, если необходимо, изменив настройку «kses» формы на false.
Если вы используете более старую версию ACF, мы рекомендуем вам добавить следующий фильтр в ваш файл functions.php.
function my_kses_post( $value ) {
// is array
if( is_array($value) ) {
return array_map('my_kses_post', $value);
}
// return
return wp_kses_post( $value );
}
add_filter('acf/update_value', 'my_kses_post', 10, 1);
Похожие
- Фильтры: acf/pre_save_post
- Гайды: Создание frontend формы