Обзор
В этой статье показано, как создать форму на фронтенде вашего сайта для добавления нового контента.
Начало работы
Если вы еще не знакомы с функциями acf_form, сначала изучите их. Для создания рабочей формы в файле шаблона доступны две функции.
| Название | Описание |
|---|---|
acf_form_head() | Эта функция помещается в верхнюю часть файла шаблона и регистрирует необходимые ассеты (CSS/JS), обрабатывает сохранённые данные и выполняет перенаправление по URL. Эта функция не принимает никаких параметров |
| acf_form() | Эта функция размещается внутри файла шаблона и создаёт HTML формы. Функция принимает массив настроек для настройки формы |
Настройки
Параметр acf_form() содержит две настройки: post_id и new_post. Правильно используя эти настройки, можно создать новую запись на основе данных формы.
Настройка post_id используется для редактирования существующей записи, но если ей присвоить ‘new_post’, будет создана новая запись.
Настройка new_post используется для указания массива элементов, из которых состоит запись. Эти элементы можно найти в документации wp_insert_post().
Примеры
Базовый
Эта форма создаст новую запись.
page-new-post.php
<?php
acf_form_head();
get_header();
?>
<div id="content">
<?php
acf_form(array(
'post_id' => 'new_post',
'post_title' => true,
'post_content' => true,
));
?>
</div>
<?php get_footer(); ?>Тип записи
Эта форма создаст новую опубликованную запись типа «event».
page-new-post.php
<?php
acf_form_head();
get_header();
?>
<div id="content">
<?php
acf_form(array(
'post_id' => 'new_post',
'post_title' => true,
'post_content' => true,
'new_post' => array(
'post_type' => 'event',
'post_status' => 'publish'
)
));
?>
</div>
<?php get_footer(); ?>Контактная форма
Этот пример создаст простую контактную форму, отправит письмо и перенаправит пользователя на страницу благодарности.
page-contact.php
<?php
acf_form_head();
get_header();
?>
<div id="content">
<?php
acf_form(array(
'post_id' => 'new_post',
'post_title' => true,
'post_content' => true,
'new_post' => array(
'post_type' => 'contact_form',
'post_status' => 'publish'
),
'return' => home_url('contact-form-thank-you'),
'submit_value' => 'Отправить'
));
?>
</div>
<?php get_footer(); ?>functions.php
add_action('acf/save_post', 'my_save_post');
function my_save_post( $post_id ) {
// прервать выполнение, если это не запись contact_form
if( get_post_type($post_id) !== 'contact_form' ) {
return;
}
// прервать выполнение, если редактирование происходит в админке
if( is_admin() ) {
return;
}
// переменные
$post = get_post( $post_id );
// получить произвольные поля (группа полей существует для content_form)
$name = get_field('name', $post_id);
$email = get_field('email', $post_id);
// данные письма
$to = '[email protected]';
$headers = 'From: ' . $name . ' <' . $email . '>' . "\r\n";
$subject = $post->post_title;
$body = $post->post_content;
// отправить письмо
wp_mail($to, $subject, $body, $headers );
}Обновлено: 01.06.2026