Зачем нужно автоматическое сохранение черновиков в WordPress
Автоматическое сохранение черновиков — это важная функция для всех, кто работает с контентом на WordPress. Она помогает избежать потери данных при случайном закрытии вкладки, отключении питания или сбоях браузера. По умолчанию WordPress сохраняет черновики каждые 60 секунд, но этого времени не всегда достаточно, а также не всегда удобно по функционалу.
В этой статье мы подробно разберём, как расширить и улучшить этот механизм, сделав автоматическое сохранение более частым и надёжным, а также добавим возможность уведомлений и контроля версии черновика. Рассмотрим как решение на базе собственного кода, так и использование проверенных плагинов.
Как работает стандартное автосохранение WordPress
WordPress использует JavaScript и AJAX для периодического сохранения контента в редакторе. При этом данные отправляются на сервер и сохраняются как ревизия поста с меткой времени.
Интервал автосохранения по умолчанию — 60 секунд, что можно изменить с помощью константы AUTOSAVE_INTERVAL в файле wp-config.php или через фильтр. Однако эти настройки не всегда подходят под все задачи, иногда нужно сохранить чаще или добавить дополнительные проверки.
Изменение интервала автосохранения стандартными средствами
Чтобы уменьшить интервал автосохранения, добавьте следующий код в файл functions.php вашей темы или в плагин:
add_filter('autosave_interval', function() { return 20000; }); // 20 секундЗначение указывается в миллисекундах. Но даже с этим изменением функционал остаётся базовым, без уведомлений или расширенных возможностей.
Реализация собственного автосохранения черновиков через AJAX и WP REST API
Для более гибкого контроля над автосохранением можно реализовать собственный механизм с помощью REST API и JavaScript. Это позволит сохранять черновики по событию, например, при изменении текста, и добавить уведомления о сохранении.
Пошаговая инструкция
1. Создайте AJAX обработчик для сохранения черновика на стороне сервера.
2. Добавьте скрипт на страницу редактора, который будет отслеживать изменения и отправлять данные на сервер.
3. Обработайте ответ и выведите уведомление о сохранении.
Пример кода сервера (PHP)
add_action('rest_api_init', function() {
register_rest_route('wpcom/v1', '/autosave', [
'methods' => 'POST',
'callback' => 'wpcom_autosave_callback',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
]);
});
function wpcom_autosave_callback(WP_REST_Request $request) {
$post_id = $request->get_param('post_id');
$content = $request->get_param('content');
if (!$post_id || !$content) {
return new WP_Error('invalid_data', 'Отсутствуют необходимые данные', ['status' => 400]);
}
$post = [
'ID' => $post_id,
'post_content' => wp_kses_post($content),
'post_status' => 'draft'
];
$result = wp_update_post($post, true);
if (is_wp_error($result)) {
return $result;
}
return ['message' => 'Черновик успешно сохранён', 'post_id' => $post_id];
}Пример JavaScript для отправки данных
jQuery(document).ready(function($) {
let timer;
$('#content').on('input', function() {
clearTimeout(timer);
timer = setTimeout(function() {
const content = $('#content').val();
const postId = $('#post_ID').val();
$.ajax({
url: wpApiSettings.root + 'wpcom/v1/autosave',
method: 'POST',
beforeSend: function(xhr) {
xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);
},
data: {
post_id: postId,
content: content
},
success: function(response) {
$('#autosave-notice').text(response.message).fadeIn().delay(2000).fadeOut();
},
error: function() {
$('#autosave-notice').text('Ошибка сохранения').fadeIn().delay(2000).fadeOut();
}
});
}, 15000); // 15 секунд после последнего ввода
});
});Не забудьте добавить элемент <div id="autosave-notice" style="display:none;color:green;margin-top:10px;"></div> в редактор для уведомлений.
Популярные плагины для расширенного автосохранения черновиков
Если не хочется писать свой код, можно использовать готовые решения. Рассмотрим несколько плагинов, которые помогают улучшить автосохранение и управление черновиками.
1. WP Autosave
Плагин позволяет изменить интервал автосохранения, добавить уведомления и логи изменений. Очень простой в использовании и не перегружает систему.
2. Revision Control
Этот плагин даёт контроль над количеством ревизий, что косвенно влияет на управление автосохранениями. Можно ограничить число ревизий и тем самым оптимизировать базу данных.
3. Clearfy Pro
Хотя Clearfy Pro — это комплексный плагин для оптимизации WordPress, в нём есть опции по управлению ревизиями и автосохранениями. Подробнее можно узнать на официальной странице плагина.
Советы по улучшению автосохранения и предотвращению потери данных
1. Используйте регулярное резервное копирование сайта, чтобы иметь возможность восстановить данные из любых ситуаций.
2. Настройте уменьшенный интервал автосохранения, если работаете с большим объёмом текста.
3. Добавьте уведомления пользователю о том, что черновик сохранён, чтобы снизить беспокойство при работе.
4. Используйте сторонние плагины для расширенного контроля, если функционала WordPress по умолчанию недостаточно.
Выводы и рекомендации
Автоматическое сохранение черновиков — важная часть рабочего процесса с WordPress. Стандартный механизм можно улучшить как с помощью простых фильтров, так и реализовав собственное решение через REST API и JavaScript. Готовые плагины также помогут быстро расширить функциональность.
Используйте описанные здесь методы и примеры, чтобы настроить удобный и надёжный механизм автосохранения именно под ваши задачи и проект.