ACF фронтенд формы

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

Пример с рабочего проэкта «желтые страницы».

Для создания рабочей формы в файле шаблона доступны две функции.

acf_form_head()Эта функция размещается в верхней части файла шаблона и регистрирует необходимые ресурсы (CSS / JS), обрабатывает сохраненные данные и перенаправляет URL-адрес. 
Эта функция не принимает никаких параметров
acf_form ()Эта функция помещается в файл шаблона и создает HTML-код формы. 
Эта функция принимает массив настроек для настройки формы

Пример шаблона страницы с формой:

<?php
/**
 * Template Name: Форма добавления к каталогу
 * @package WordPress
 * @subpackage Twenty_Nineteen
 * @since 1.0.0
 */
acf_form_head();
get_header();
?>

<div class="container">
<?php the_content(); ?>

<?php
    // Load the form
    acf_form('new-catalog');
?>
</divar>
<?php
get_footer();

Сама функция добавления файлов в форму:

//add form frontend
add_action('acf/init', 'my_acf_form_init');
function my_acf_form_init() {

    // Check function exists.
    if( function_exists('acf_register_form') ) {
        // Register form.
        $fields = array(
            'field_607ec86fe66e0',
            'field_607ee900ee462',
            'field_607ee91dee463'
        );
        
        acf_register_form(array(
            'id'		    	=> 'new-catalog',
            'post_id'	    	=> 'new_post',
            'new_post'			=> array(
                'post_type'		=> 'yellow-pages',
                'post_status'	=> 'draft',
                'post_title'    => 'New yellow pages'
            ),
            'post_title'		=> false,
            'post_content'  	=> false,
            'html_before_fields' => '',
            'html_after_fields' => '',
            'label_placement' => 'bottom',
            'instruction_placement' => 'field',
            'uploader'      	=> 'basic',
            'return'			=> home_url('thank-you'),
            'fields'				=> $fields,
            'submit_value'		=> 'Додати до каталогу'
        ));
        
    }
}

Для добавления возможности работы с полями можем использовать acf/save_post хуки действий ACF .

Пример изменения заголовка записи:

function ps_acf_save_post( $post_id ) {
    // Don't do this on the ACF post type
    if ( get_post_type( $post_id ) == 'acf' ) return;

    // Get the Fields
    $fields = get_field_objects( $post_id );

    // Prevent Infinite Looping...
    remove_action( 'acf/save_post', 'my_acf_save_post' );

    // Grab Post Data from the Form
    $post = array(
        'ID'           => $post_id,
        'post_type'    => 'yellow-pages',
        'post_title'   => $fields['yarlyk_for_map']['value'],
        'post_status'  => 'draft'
    );

    // Update the Post
    wp_update_post( $post );

    // Continue save action
    add_action( 'acf/save_post', 'my_save_post' );

    // Set the Return URL in Case of 'new' Post
    $_POST['return'] = add_query_arg( 'updated', 'true', get_permalink( $post_id ) );
}
add_action( 'acf/save_post', 'ps_acf_save_post', 10, 1 );

Ну и приятная мелочь для админки — это menu bubble для новых постов

add_action( 'admin_menu', 'add_user_menu_bubble' );
function add_user_menu_bubble(){
	global $menu;
	$count = wp_count_posts('yellow-pages')->draft; // на подтверждении
	if( $count ){
		foreach( $menu as $key => $value ){
			if( $menu[$key][2] == 'edit.php?post_type=yellow-pages' ){
				$menu[$key][0] .= ' <span class="awaiting-mod"><span class="pending-count">' . $count . '</span></span>';
				break;
			}
		}
	}
}

Можем добавить отправку админу на почту письма о добавлении статьи:
После add_action( 'acf/save_post', 'my_save_post' ); добавить

// get custom fields (field group exists for content_form)
$name = get_field('name', $post_id);
$email = get_field('email', $post_id);

// email data
$to = 'contact@website.com';
$headers = 'From: ' . $name . ' <' . $email . '>' . "\r\n";
$subject = $post->post_title;
$body = $post->post_content;

// send email
wp_mail($to, $subject, $body, $headers );
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии