Автоматическое сохранение — одна из важнейших функций современного редактора WordPress, которая помогает избежать потери данных при редактировании постов и страниц. Несмотря на то, что в стандартном редакторе Gutenberg уже есть базовое автосохранение, оно бывает недостаточно гибким и не всегда подходит под конкретные задачи. В этой статье мы разберем, как добавить или улучшить автоматическое сохранение в редакторе WordPress с помощью готовых плагинов и собственного кода.
Почему стоит дополнительно настраивать автоматическое сохранение в WordPress
Стандартное автосохранение в WordPress срабатывает каждые 60 секунд и сохраняет временную версию поста. Но это не всегда удобно, особенно если вы работаете с большими текстами или сложным контентом с медиафайлами. Кроме того, стандартное автосохранение может создавать много ревизий, что нагружает базу данных.
Добавление кастомного автосохранения позволяет:
- Уменьшить частоту сохранений, чтобы снизить нагрузку на сервер
- Добавить уведомления о сохранении, чтобы пользователь всегда знал, что данные не потерялись
- Автоматически сохранять дополнительные поля или метаданные
- Интегрировать автосохранение с кастомными редакторами или полями
Все эти возможности расширяют стандартный функционал и делают работу с редактором комфортнее и надежнее.
Обзор популярных плагинов для автоматического сохранения в WordPress
Если не хочется писать код самостоятельно, можно использовать плагины, которые решают задачи автоматического сохранения более гибко.
1. Better Autosave
Плагин позволяет настраивать интервал автосохранения, добавляет уведомления о сохранении и уменьшает количество ревизий. Это простой и надежный вариант, чтобы улучшить стандартный механизм.
2. Revision Control
Хотя этот плагин не занимается автосохранением напрямую, он помогает управлять ревизиями — то есть сохранять только нужное количество версий и тем самым оптимизировать базу данных.
3. Кастомные решения с Advanced Custom Fields (ACF)
Если ваш сайт использует сложные поля, например, через ACF, то штатное автосохранение может не сохранять все данные корректно. В таких случаях можно добавить свой скрипт автосохранения, который будет учитывать кастомные поля.
Как написать собственный код для автоматического сохранения в редакторе WordPress
Для более тонкой настройки и интеграции можно реализовать автосохранение своими силами. Ниже приведен пример, как расширить стандартный механизм с помощью JavaScript и PHP.
Добавление JavaScript для периодического сохранения
Мы добавим скрипт, который будет автоматически запускать сохранение поста через REST API WordPress каждые 30 секунд.
function wphelper_enqueue_autosave_script() {
wp_enqueue_script('wphelper-autosave', get_template_directory_uri() . '/js/wphelper-autosave.js', array('wp-api', 'jquery'), null, true);
wp_localize_script('wphelper-autosave', 'wphelperAutosave', array(
'postId' => get_the_ID(),
'nonce' => wp_create_nonce('wp_rest')
));
}
add_action('admin_enqueue_scripts', 'wphelper_enqueue_autosave_script');В файле wphelper-autosave.js напишем следующий код:
(function($) {
function wphelperAutosavePost() {
var postId = wphelperAutosave.postId;
if (!postId) return;
var data = {
status: 'draft'
};
$.ajax({
url: '/wp-json/wp/v2/posts/' + postId,
method: 'POST',
beforeSend: function(xhr) {
xhr.setRequestHeader('X-WP-Nonce', wphelperAutosave.nonce);
},
data: data,
success: function(response) {
console.log('Пост сохранен автоматически', response);
},
error: function() {
console.warn('Ошибка автосохранения');
}
});
}
setInterval(wphelperAutosavePost, 30000); // Каждые 30 секунд
})(jQuery);Обработка сохранения на сервере
Для простого обновления статуса поста через REST API дополнительный PHP-код не нужен, если у пользователя есть права. Но если вы хотите сохранять дополнительные поля или выполнять валидацию, можно добавить обработчики для REST API.
function wphelper_register_custom_rest_fields() {
register_rest_field('post', 'custom_meta', array(
'get_callback' => function($post) {
return get_post_meta($post['id'], '_custom_meta_key', true);
},
'update_callback' => function($value, $post) {
update_post_meta($post->ID, '_custom_meta_key', sanitize_text_field($value));
},
'schema' => array(
'description' => 'Custom meta field',
'type' => 'string',
'context' => array('view', 'edit')
),
));
}
add_action('rest_api_init', 'wphelper_register_custom_rest_fields');Практические советы по улучшению автосохранения
Чтобы автосохранение работало эффективно и не создавало проблем, учитывайте следующие рекомендации:
- Оптимизируйте частоту сохранений. Выставляйте интервал в зависимости от типа контента и объема данных. Например, для больших страниц можно увеличить интервал до минуты или двух.
- Используйте уведомления. Добавьте визуальные индикаторы, чтобы пользователь видел, когда происходит автосохранение и успешно ли оно прошло.
- Обрабатывайте ошибки. Если автосохранение не удалось, уведомляйте пользователя и давайте возможность вручную сохранить изменения.
- Минимизируйте ревизии. Настраивайте количество ревизий и очищайте старые, чтобы база данных не разрасталась.
Выводы и перспективы
Добавление или улучшение системы автоматического сохранения в редактор WordPress — задача, которая может значительно повысить удобство работы с сайтом и защитить данные от потерь. Используйте готовые плагины для быстрого старта или создавайте собственные решения с учетом специфики вашего проекта. Важно протестировать автосохранение на разных устройствах и браузерах, чтобы убедиться в стабильности работы.
С помощью описанных приемов вы сможете создать надежный механизм автосохранения, который будет работать именно так, как вам нужно.