В стандартной установке WordPress автоматическое сохранение черновиков происходит каждые 60 секунд. Однако для некоторых проектов и сайтов требуется более гибкий и надежный механизм автосохранения, например, с меньшим интервалом или с дополнительными условиями. В этой статье разберем, как реализовать автоматическое сохранение черновиков в WordPress с помощью кастомного таймера и обработки AJAX-запросов, а также рассмотрим полезные плагины, которые помогают в этом.
Почему стандартное автосохранение WordPress не всегда подходит
Стандартный механизм автосохранения WordPress использует JavaScript, который каждые 60 секунд отправляет AJAX-запрос и сохраняет текущий контент как черновик. Это решение работает хорошо для большинства пользователей, но имеет ряд ограничений:
- Интервал в 60 секунд не всегда оптимален — на некоторых проектах нужна более частая или реже автосохранение.
- Автосохранение может создавать лишние записи в базе данных, если пользователь редактирует запись долго.
- Нет контроля над условиями запуска автосохранения — например, только при изменении контента или при неактивности пользователя.
Для решения этих задач можно написать собственное решение либо использовать расширенные плагины.
Реализация кастомного автосохранения черновиков с помощью JavaScript и AJAX
Рассмотрим пример, как создать собственный таймер автосохранения с интервалом 30 секунд и отправкой данных через AJAX к кастомному обработчику в WordPress.
1. Добавление JavaScript на страницу редактирования записи
Для начала добавим скрипт, который будет запускать автосохранение.
function wpload_enqueue_autosave_script($hook) {
if ( 'post.php' !== $hook && 'post-new.php' !== $hook ) {
return;
}
wp_enqueue_script('wpload-custom-autosave', get_template_directory_uri() . '/js/wpload-autosave.js', array('jquery'), '1.0', true);
wp_localize_script('wpload-custom-autosave', 'wploadAjax', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'post_id' => get_the_ID(),
'nonce' => wp_create_nonce('wpload_autosave_nonce')
));
}
add_action('admin_enqueue_scripts', 'wpload_enqueue_autosave_script');Этот код подключает скрипт wpload-autosave.js только на страницах редактирования записи и передает туда AJAX URL, ID записи и nonce для безопасности.
2. JavaScript код автосохранения (файл wpload-autosave.js)
jQuery(document).ready(function($){
function wpload_saveDraft() {
var content = $('#content').val();
var post_id = wploadAjax.post_id;
var data = {
action: 'wpload_autosave',
post_id: post_id,
content: content,
nonce: wploadAjax.nonce
};
$.post(wploadAjax.ajaxurl, data, function(response) {
if(response.success) {
console.log('Автосохранение прошло успешно: ' + response.data.message);
} else {
console.log('Ошибка автосохранения: ' + response.data.message);
}
});
}
// запуск автосохранения каждые 30 секунд
setInterval(wpload_saveDraft, 30000);
});Этот скрипт каждые 30 секунд отправляет содержимое основного редактора на сервер для сохранения.
3. Обработка AJAX-запроса на сервере
Теперь добавим PHP-функцию, которая сохранит черновик при получении AJAX-запроса.
function wpload_handle_autosave() {
check_ajax_referer('wpload_autosave_nonce', 'nonce');
$post_id = intval($_POST['post_id']);
$content = wp_kses_post($_POST['content']);
if (!$post_id || empty($content)) {
wp_send_json_error(array('message' => 'Неверные данные.'));
}
$post = array(
'ID' => $post_id,
'post_content' => $content,
'post_status' => 'draft'
);
$result = wp_update_post($post, true);
if (is_wp_error($result)) {
wp_send_json_error(array('message' => $result->get_error_message()));
}
wp_send_json_success(array('message' => 'Черновик сохранен.'));
}
add_action('wp_ajax_wpload_autosave', 'wpload_handle_autosave');Эта функция проверяет nonce, получает данные из запроса, обновляет содержание записи в статусе черновика и возвращает JSON-ответ с результатом.
Как улучшить автосохранение: дополнительные советы и плагины
Если вы не хотите писать код самостоятельно, обратите внимание на готовые плагины, которые расширяют стандартное автосохранение:
- WP Auto Save Settings — позволяет настраивать интервал автосохранения через админку без кода.
- Revision Control — управляет количеством ревизий записей, что помогает избежать раздувания базы данных при частом автосохранении.
- Clearfy Pro — в числе множества функций улучшает работу редактора, в том числе автосохранение и ревизии.
Использование этих плагинов поможет оптимизировать работу с черновиками и сохранить важные изменения без потерь.
Рекомендации по оптимизации автосохранения черновиков
При реализации автосохранения учтите следующие моменты:
- Не сохраняйте черновики слишком часто — это приведет к избыточным ревизиям и нагрузке на базу данных.
- Используйте фильтры WordPress для ограничения количества ревизий (
wp_revisions_to_keep), чтобы база данных оставалась чистой. - Включайте автосохранение только при изменениях контента, если возможно, чтобы избежать лишних запросов.
- Обязательно проверяйте безопасность AJAX-запросов с помощью nonce.
Например, чтобы ограничить количество ревизий, добавьте в functions.php:
function wpload_limit_revisions($num, $post) {
return 5; // сохранять не более 5 ревизий
}
add_filter('wp_revisions_to_keep', 'wpload_limit_revisions', 10, 2);Выводы и полезные ссылки
Автоматическое сохранение черновиков — важный элемент комфортной работы с WordPress, особенно если редактирование длительное или сложное. Создание кастомного решения позволяет настроить автосохранение под конкретные задачи, а использование проверенных плагинов упрощает процесс.
Рекомендуем ознакомиться с плагином Clearfy Pro, который помогает оптимизировать работу сайта и редактора в том числе.
Также полезно использовать WPQuery для создания сложных запросов, когда нужно программно получать нужные черновики.