Использование acf_form для создания новой записи

Обзор

В этой статье показано, как создать форму на фронтенде вашего сайта для добавления нового контента.

Начало работы

Если вы еще не знакомы с функциями 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