Автоматическое сохранение изменений — важный функционал для редакторов и авторов контента в WordPress. Это помогает избежать потери данных при сбоях, случайном закрытии браузера или потере интернет-соединения. В этой статье подробно рассмотрим, как создать надежное автоматическое сохранение изменений с помощью плагинов и собственных решений на PHP и JavaScript.
Зачем нужно автоматическое сохранение в WordPress
WordPress уже имеет встроенный механизм автосохранения, который сохраняет черновики каждые 60 секунд. Однако он работает только при открытии редактора и не всегда учитывает пользовательские изменения, сделанные через сторонние мета-боксы или кастомные поля. Кроме того, стандартные автосохранения влияют на базу данных, создавая много ревизий, что может замедлять сайт.
Создание собственного автоматического сохранения позволяет:
- Регулировать частоту и условия сохранения;
- Сохранять дополнительные данные (например, кастомные поля, настройки плагинов);
- Оптимизировать количество ревизий и нагрузку на базу данных;
- Добавить визуальные уведомления для пользователя о статусе сохранения.
Использование плагина для автосохранения с расширенными возможностями
Один из популярных плагинов для расширенного автосохранения — Clearfy. Он позволяет настроить параметры автосохранения, уменьшить количество ревизий, а также отключить ненужные функции, которые влияют на производительность.
Clearfy Pro имеет опции, которые помогут сократить нагрузку на базу данных за счет удаления устаревших ревизий и оптимизации автообновлений. Плагин также предлагает удобный интерфейс для управления автосохранениями и логами.
Настройка Clearfy для автосохранения
После установки плагина перейдите в его настройки и активируйте функцию управления ревизиями. Можно указать, как часто сохранять изменения и сколько ревизий хранить для каждой записи. Это позволит избежать накопления лишних данных в базе.
Пример кода для создания собственного автосохранения через AJAX
Если нужно сделать более гибкое и тонкое автосохранение, можно написать собственный код, который будет сохранять изменения через AJAX без перезагрузки страницы. Ниже пример реализации на основе WordPress API.
1. Добавляем JavaScript для отправки данных
function wplab_enqueue_autosave_script() {
wp_enqueue_script('wplab-autosave', get_template_directory_uri() . '/js/wplab-autosave.js', array('jquery'), null, true);
wp_localize_script('wplab-autosave', 'wplabAutosave', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('wplab_autosave_nonce'),
'post_id' => get_the_ID(),
));
}
add_action('wp_enqueue_scripts', 'wplab_enqueue_autosave_script');Создадим файл wplab-autosave.js с таким содержанием:
(function($) {
let timer;
$('#content').on('input', function() {
clearTimeout(timer);
timer = setTimeout(function() {
const content = $('#content').val();
$.post(wplabAutosave.ajax_url, {
action: 'wplab_save_post_content',
nonce: wplabAutosave.nonce,
post_id: wplabAutosave.post_id,
content: content
}, function(response) {
if(response.success) {
console.log('Сохранено автоматически');
} else {
console.log('Ошибка автосохранения');
}
});
}, 5000); // сохраняем через 5 секунд после последнего ввода
});
})(jQuery);2. Обработка AJAX в PHP
function wplab_handle_autosave() {
check_ajax_referer('wplab_autosave_nonce', 'nonce');
$post_id = intval($_POST['post_id']);
$content = sanitize_text_field($_POST['content']);
if(!$post_id || empty($content)) {
wp_send_json_error('Некорректные данные');
}
$post_data = array(
'ID' => $post_id,
'post_content' => $content
);
$result = wp_update_post($post_data, true);
if(is_wp_error($result)) {
wp_send_json_error($result->get_error_message());
} else {
wp_send_json_success('Сохранено');
}
}
add_action('wp_ajax_wplab_save_post_content', 'wplab_handle_autosave');Как расширить автосохранение для кастомных полей и мета-данных
Автосохранение можно настроить не только для основного контента, но и для любых пользовательских данных. Для этого нужно передавать и сохранять мета-поля через AJAX.
В JavaScript добавьте поля формы, а в PHP обработайте их сохранение с помощью update_post_meta. Например:
// В JS добавляем данные meta
$.post(wplabAutosave.ajax_url, {
action: 'wplab_save_post_content',
nonce: wplabAutosave.nonce,
post_id: wplabAutosave.post_id,
content: content,
meta_field: $('#meta_field_id').val()
});
// В PHP
if(isset($_POST['meta_field'])) {
update_post_meta($post_id, 'meta_field_key', sanitize_text_field($_POST['meta_field']));
}Практические советы по оптимизации автосохранений
- Не сохраняйте слишком часто — нагрузка на сервер и база растут. 5-10 секунд после последнего изменения — оптимальное время.
- Используйте nonce и проверки прав пользователя для безопасности.
- Ограничьте количество ревизий через фильтр
wp_revisions_to_keepили плагин Clearfy. - Добавьте визуальный индикатор статуса сохранения для удобства пользователя.
- Для больших сайтов рассмотрите сохранение изменений в отдельной таблице или кэше, чтобы не нагружать стандартные таблицы WordPress.
Заключение по теме автосохранения
Создание надежного автосохранения в WordPress — задача, решаемая как с помощью готовых плагинов, так и кастомных решений. Используйте примеры из статьи, чтобы адаптировать функционал под свои задачи и улучшить работу редакторов на сайте.