Обзор
В этой статье рассказывается, как создать форму на фронтенде сайта для добавления нового контента.
Начало работы
Если вы ещё не знакомы с функциями формы ACF, ознакомьтесь с ними. В файле шаблона доступны две функции для создания рабочей формы.
| Название | Описание |
|---|---|
acf_form_head() | Эта функция размещается в начале файла шаблона. Она регистрирует необходимые ресурсы (CSS/JS), обрабатывает сохранённые данные и выполняет перенаправление. Функция не принимает параметров. |
| 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 );
}Обновлено: 30.09.2026