acf_form()

Обзор

Эта функция создает элемент <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);

Похожие