eurobyte.ru - мощные сервера с Дата-центрами в Нидерландах и Москве. От 159 ₽/мес.

acf_form()ACF 1.0

Отображает форму для добавления/редактирования записей (постов).

Форму можно также зарегистрировать с помощью функции 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.

Работает на основе: acf_form_front::render_form()

Хуков нет.

Возвращает

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

#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(); ?>
1

#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;
}

В итоге на выходе получаем такое:

0

#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(); ?>
0

#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 6.0.4

function acf_form( $args = array() ) {

	acf()->form_front->render_form( $args );

}
alexlead 71codepen.io/alexlead
Редакторы: Kama 9771, campusboy 4872
9 комментариев
    Войти