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

Обзор

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

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

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