В этой статье будет рассказано, как создать форму в интерфейсе вашего веб-сайта для добавления нового контента.
Пример с рабочего проэкта «желтые страницы».
Для создания рабочей формы в файле шаблона доступны две функции.
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 );