Автоматическое сохранение черновиков — одна из важных функций для любого сайта на WordPress, особенно если у вас большой объем контента и вы хотите избежать потери данных из-за случайного закрытия браузера или сбоев. В стандартном редакторе WordPress Gutenberg есть автосохранение, но оно работает только с периодичностью около 60 секунд и не всегда удобно для профессиональной работы с контентом.
Почему стоит реализовать дополнительное автоматическое сохранение черновиков
Стандартное автосохранение в WordPress ограничено и не подходит для всех сценариев. Например, при работе с большими текстами или сложными блоками часто требуется более частое сохранение. Кроме того, иногда нужен функционал, который сохраняет черновики на внешние сервисы или в отдельную таблицу БД, чтобы минимизировать риск потери контента.
Реализовав собственное решение, вы можете настроить частоту сохранения, добавить уведомления о сохранении, интегрировать плагин Clearfy Pro для оптимизации работы и повысить стабильность редактора.
Пример решения: добавляем автоматическое сохранение с помощью AJAX и WP Cron
Ниже представлен пример, как можно реализовать автоматическое сохранение черновиков с частотой в 15 секунд по AJAX, используя собственный PHP-обработчик и JavaScript. Такой подход даст вам гибкость и позволит расширять функционал.
1. Регистрация AJAX-обработчика в functions.php
add_action('wp_ajax_wpedu_auto_save_draft', 'wpedu_auto_save_draft_callback');
function wpedu_auto_save_draft_callback() {
if (!current_user_can('edit_posts')) {
wp_send_json_error('Нет прав');
}
$post_id = intval($_POST['post_id']);
$content = wp_kses_post($_POST['content']);
if (!$post_id || empty($content)) {
wp_send_json_error('Параметры не переданы');
}
$post = get_post($post_id);
if (!$post) {
wp_send_json_error('Пост не найден');
}
$update = wp_update_post([
'ID' => $post_id,
'post_content' => $content,
'post_status' => 'draft'
], true);
if (is_wp_error($update)) {
wp_send_json_error('Ошибка сохранения');
}
wp_send_json_success('Черновик сохранён');
}
2. Добавляем JavaScript для автосохранения
Этот скрипт можно добавить в админскую часть редактора или в кастомный плагин:
jQuery(document).ready(function($) {
var autoSaveInterval = 15000; // 15 секунд
var postId = $('#post_ID').val();
function wpeduAutoSaveDraft() {
var content = wp.data.select('core/editor').getEditedPostContent();
$.post(ajaxurl, {
action: 'wpedu_auto_save_draft',
post_id: postId,
content: content,
}, function(response) {
if (response.success) {
console.log('Авто-сохранение: ' + response.data);
} else {
console.error('Ошибка авто-сохранения: ' + response.data);
}
});
}
setInterval(wpeduAutoSaveDraft, autoSaveInterval);
});
Как улучшить функционал: интеграция с плагинами WPShop
Для тех, кто использует продукты WPShop, можно расширить автоматическое сохранение, например, подключив Clearfy Pro. Этот плагин поможет оптимизировать работу редактора и снизить нагрузку на сервер при частом сохранении.
Также можно использовать WPRemark для добавления комментариев к черновикам и контроля версий прямо в процессе автосохранения.
Как настроить частоту автосохранения через WP Cron
Если вы хотите, чтобы автосохранение происходило в фоне без участия пользователя, можно использовать WP Cron. Например, запускать задачу каждые 5 минут, которая будет сохранять черновики с пометкой "автоматически сохранено".
function wpedu_schedule_auto_save() {
if (!wp_next_scheduled('wpedu_cron_auto_save')) {
wp_schedule_event(time(), 'five_minutes', 'wpedu_cron_auto_save');
}
}
add_action('wp', 'wpedu_schedule_auto_save');
add_action('wpedu_cron_auto_save', 'wpedu_auto_save_all_drafts');
function wpedu_auto_save_all_drafts() {
$args = [
'post_type' => 'post',
'post_status' => 'draft',
'numberposts' => -1,
];
$drafts = get_posts($args);
foreach ($drafts as $draft) {
$new_content = $draft->post_content . "\n\n<!-- Автоматическое сохранение " . current_time('mysql') . " -->";
wp_update_post([
'ID' => $draft->ID,
'post_content' => $new_content
]);
}
}
// Регистрируем интервал 5 минут
add_filter('cron_schedules', function($schedules) {
$schedules['five_minutes'] = [
'interval' => 300,
'display' => 'Каждые 5 минут'
];
return $schedules;
});
Резюме и рекомендации по внедрению
Автоматическое сохранение черновиков — важный элемент стабильной работы с контентом. Используя AJAX и WP Cron, вы можете гибко настроить этот процесс под свои нужды. Не забывайте тестировать функционал на стейджинге и оптимизировать нагрузку с помощью плагинов из WPShop.
Используйте приведённый код как отправную точку, дополняйте его проверками, уведомлениями и интеграцией с другими сервисами для максимального удобства редакторов и авторов вашего сайта.