Продолжая тему создания постов с фронт-енда, предлагаю вашему вниманию инструкцию Редактирование поста с фронт-енда.
За основу использовался пример с сайта The Stiz Media
Итак, Форма создания нового поста с фронт-енда уже создана. Теперь нужно сделать возможность редактирования этого поста.
Шаг1. Добавить форму редактирования в шаблон single.php
Форму редактирования нужно добавить прямо в шаблон single.php. Нужно использовать те же поля, что были созданы при добавлении формы нового поста.
Первым делом в шаблон single.php в самом начале шаблона перед get_header(); нужно добавить acf_form_head();. Выглядеть начало шаблона будет так:
1 2 3 4 5 6 7 8 9 10 | <?php /** * The Template for displaying all single posts. * * @package Cryout Creations * @subpackage nirvana * @since nirvana 0.5 */ acf_form_head(); get_header();?> |
Далее, в том месте, где необходимо добавить кнопку редактирования поста, добавить следующий код. Лучше всего после <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <!-- Кнопка редактировать с помощью ACF --> <?php // Сбор информации о пользователе global $post,$current_user; get_currentuserinfo(); if ( ! ( is_user_logged_in() && $current_user->ID == $post->post_author ) ) { } else {?> <!--Скрипт спойлера, Для работы нужен jquery-- > <script type="text/javascript"> jQuery(document).ready(function($) { $(document).ready(function(){ $('.spoiler_links').click(function(){ $(this).parent().children('div.spoiler_body').toggle('normal'); return false; }); }); }); </script> <!--//Скрипт спойлера--> <div> <!--Кнопка спойлера--> <a style="float: right;" href="" >Редактировать</a> <!--//Кнопка спойлера--> <!--Форма редактирования в спойлере--> <div style="background-color: #FAEBD7; padding: 40px; border-radius: 7px;" class="spoiler_body"> <?php $edit_post = array( 'post_id' => get_the_ID(), // Get the post ID 'field_groups' => array(1210, 1215, 1208), // Create post field group ID(s) 'form' => true, 'return' => '%post_url%', 'html_before_fields' => '', 'html_after_fields' => '', 'submit_value' => 'Сохранить изменения' ); acf_form( $edit_post );?> <br /> <br /> <br /> <br /> Начало Вашего поста: </div><!--Форма редактирования в спойлере--> </div> <?php }?></!-- Кнопка редактировать с помощью ACF --> |
Традиционно в форме нужно изменить ID групп полей, то есть цифры 1210, 1215, 1208 заменить на свои ID.
Шаг 2. Форма в спойлере
Для того, чтобы форма редактирования была скрыта, в коде предусмотрен спойлер. Сама форма помещена внутрь спойлера. Она появляется после нажатия на кнопку “Редактировать”.
Для работы спойлера нужно, чтобы была подключена библиотека jquery. Обычно она уже подключена по умолчанию. У меня, например, подключена следующая библиотека (код добавляется в function.php):
1 2 3 | wp_deregister_script('jquery'); wp_register_script('jquery', 'http://code.jquery.com/jquery-latest.min.js', false, false); wp_enqueue_script( 'jquery' ); |
Также для работы спойлера нужно доавить следующие стили:
1 2 3 | /* спойлер */ .spoiler_body {display:none;} .spoiler_links {cursor:pointer;} |
Шаг 3. Добавить функцию acf/save_post
Для работы формы, нужно добавить функцию в шаблон function.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | //Редактировать пост function tsm_update_existing_post_data( $post_edit_id ) { // Обновить существующий пост $post_edit = array( 'ID' => $post_edit_id, 'post_status' => 'private', 'post_title' => wp_strip_all_tags($_POST['acf']['field_54dfc93e35ec4']), // Заголовок ACF field key 'post_content' => $_POST['acf']['field_5509d61f8541f'], // Содержание ACF field key ); // Update the post $post_edit_id = wp_insert_post( $post_edit ); // Изображение ACF field key $image_edit = $_POST['acf']['field_55003d1d76fc1']; // Add the value which is the image ID to the _thumbnail_id meta data for the current post update_post_meta( $post_edit_id, '_thumbnail_id', $image_edit ); } add_action( 'acf/save_post', 'tsm_update_existing_post_data', 10 ); add_action( 'wp_print_styles', 'my_deregister_styles', 100 ); function my_deregister_styles() { wp_deregister_style( 'wp-admin' ); } |
В коде нужно заменить ключи полей (Fields Key), если вы создавали поля самостоятельно. Если вы импортировали мой файл acf-export.rar ранее, тогда этого делать не нужно так как ключи совпадают.
Теперь зарегистрированные пользователи могут не только добавлять новые посты, но и редактировать их. И для этого не обязательно пускать их в админ-панель.
добрый вечер! отличное решение для acf, спасибо! единственное, заметил один момент – при пересохранении поста из фронтенда – сбрасываются все присвоенные ему доп категории, кроме категории по умолчанию. не сталкивались с этим?
Я только начал работать с ACF, подскажите, эти примеры универсальны?
Мне не нужно будет шаблон переписывать под отдельную вновь созданную форму?
Достаточно будет подставить йд полей?, а вывод форм произайдет автоматически.
Сложно сказать до конца – но, по идее да, это пример универсальный.