За основу использовался пример с сайта The Stiz Media
Итак, Форма создания нового поста с фронт-енда уже создана. Теперь нужно сделать возможность редактирования этого поста.
Форму редактирования нужно добавить прямо в шаблон single.php. Нужно использовать те же поля, что были созданы при добавлении формы нового поста.
Первым делом в шаблон single.php в самом начале шаблона перед get_header(); нужно добавить acf_form_head();. Выглядеть начало шаблона будет так:
<?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(); ?>:
<!-- Кнопка редактировать с помощью 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.
Для того, чтобы форма редактирования была скрыта, в коде предусмотрен спойлер. Сама форма помещена внутрь спойлера. Она появляется после нажатия на кнопку “Редактировать”.
Для работы спойлера нужно, чтобы была подключена библиотека jquery. Обычно она уже подключена по умолчанию. У меня, например, подключена следующая библиотека (код добавляется в function.php):
wp_deregister_script('jquery');
wp_register_script('jquery', 'http://code.jquery.com/jquery-latest.min.js', false, false);
wp_enqueue_script( 'jquery' );
Также для работы спойлера нужно доавить следующие стили:
/* спойлер */.spoiler_body {display:none;}
.spoiler_links {cursor:pointer;} Для работы формы, нужно добавить функцию в шаблон function.php
//Редактировать пост
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 ранее, тогда этого делать не нужно так как ключи совпадают.
Теперь зарегистрированные пользователи могут не только добавлять новые посты, но и редактировать их. И для этого не обязательно пускать их в админ-панель.
Если при открытие csv файла с помощью excel У все поехали ячейки - это простой… Read More
Простые шаги как происходит Загрузка проекта на Github и Автодеплой на сервер Сделайте работу проще! Read More
Миграция базы данных - помогают с этим библиотеки SQLAlchemy и Alembic. Read More
Основные Команды Git, которые точно пригодятся. Сохрани себе шпаргалку Git Read More
Установка PostgreSQL на сервер Read More
Как создать PrimaryKey в талице базы данных SQL [РЕШЕНО] Ошибка relation tablename_id_seq doesn't exist Read More
View Comments
добрый вечер! отличное решение для acf, спасибо! единственное, заметил один момент - при пересохранении поста из фронтенда - сбрасываются все присвоенные ему доп категории, кроме категории по умолчанию. не сталкивались с этим?
Я только начал работать с ACF, подскажите, эти примеры универсальны?
Мне не нужно будет шаблон переписывать под отдельную вновь созданную форму?
Достаточно будет подставить йд полей?, а вывод форм произайдет автоматически.
Сложно сказать до конца - но, по идее да, это пример универсальный.