Автоматическое сохранение черновиков — важная функция для авторов контента, которая позволяет избежать потери данных из-за сбоев или случайного закрытия браузера. В стандартном WordPress есть autosave, но его поведение можно улучшить и настроить под конкретные задачи. В этой статье рассмотрим, как создать собственное автоматическое сохранение черновиков с помощью JavaScript и PHP, а также какие плагины помогут расширить функционал.
Почему стандартное автосохранение WordPress не всегда достаточно
WordPress по умолчанию сохраняет черновики через AJAX каждые 60 секунд. Однако в некоторых случаях этого недостаточно:
- Интервал сохранения нельзя легко настроить через админку.
- При больших проектах данные могут теряться, если соединение нестабильное.
- Автосохранение не учитывает кастомные мета-поля и сложные настройки блоков.
Поэтому многие разработчики и сайты с большим объемом контента нуждаются в более гибком решении.
Создание собственного автосохранения черновиков с помощью JavaScript и PHP
Добавляем JavaScript для периодического сохранения
Ниже пример простого скрипта, который будет отправлять AJAX-запрос на сервер с содержимым редактора каждые 30 секунд. Это позволит реализовать кастомное автосохранение.
function wpurok_autosave_init() {
if ('undefined' === typeof wpurokAutosaveInterval) {
var wpurokAutosaveInterval = setInterval(function() {
var postID = document.getElementById('post_ID').value;
var content = tinymce.get('content') ? tinymce.get('content').getContent() : document.getElementById('content').value;
var data = {
action: 'wpurok_autosave',
post_id: postID,
content: content,
security: wpurok_ajax_obj.nonce
};
jQuery.post(wpurok_ajax_obj.ajax_url, data, function(response) {
if(response.success) {
console.log('Черновик сохранён');
} else {
console.log('Ошибка сохранения');
}
});
}, 30000); // 30 секунд
}
}
jQuery(document).ready(function() {
wpurok_autosave_init();
});Этот скрипт можно подключить в админке WordPress через хук admin_enqueue_scripts, передав ajax_url и nonce для безопасности.
Обработка AJAX-запроса в PHP
Создадим функцию-обработчик в файле functions.php вашей темы или в плагине, которая будет принимать данные и сохранять черновик.
add_action('wp_ajax_wpurok_autosave', 'wpurok_handle_autosave');
function wpurok_handle_autosave() {
check_ajax_referer('wpurok_nonce', 'security');
$post_id = intval($_POST['post_id']);
$content = wp_kses_post($_POST['content']);
if (!$post_id || !current_user_can('edit_post', $post_id)) {
wp_send_json_error('Недостаточно прав или неверный ID');
}
$post_data = array(
'ID' => $post_id,
'post_content' => $content,
'post_status' => 'draft'
);
$updated = wp_update_post($post_data, true);
if (is_wp_error($updated)) {
wp_send_json_error('Ошибка обновления поста');
} else {
wp_send_json_success('Черновик сохранён');
}
}Эта функция проверяет права пользователя, обновляет контент поста и возвращает ответ для JS.
Расширение функционала автосохранения: работа с мета-полями и полным редактором Gutenberg
Если вы используете кастомные мета-поля или Gutenberg-блоки, простой подход с контентом не всегда подходит. Для сохранения мета-полей нужно дополнительно передавать их значения и обновлять через update_post_meta.
Пример передачи мета-поля:
var metaValue = jQuery('#my_meta_field').val();
var data = {
action: 'wpurok_autosave',
post_id: postID,
content: content,
my_meta: metaValue,
security: wpurok_ajax_obj.nonce
};И в PHP добавить:
if(isset($_POST['my_meta'])) {
update_post_meta($post_id, 'my_meta_key', sanitize_text_field($_POST['my_meta']));
}Для Gutenberg можно использовать REST API и сохранять весь объект поста через /wp/v2/posts/{id} с помощью JavaScript Fetch API. Это существенно сложнее, но даёт полный контроль.
Плагины для расширенного автосохранения и управления черновиками
Если хочется готовое решение, обратите внимание на следующие плагины:
- Clearfy Pro — оптимизирует работу редактора и автосохранения, расширяет настройки.
- WPCommunity — если нужна соцсеть с расширенным редактированием и автосохранением.
- WPGPT — с помощью ИИ можно организовать интеллектуальное автосохранение и помощь авторам.
Пользовательские советы и рекомендации по автосохранению
При реализации автосохранения обратите внимание на:
- Интервал сохранения — слишком частое может нагружать сервер, слишком редкое — опасно потерей данных.
- Безопасность — используйте nonce и проверяйте права пользователя.
- Обработка ошибок — уведомляйте пользователя, если сохранение не удалось.
- Совместимость с плагинами и темами — тестируйте на вашем окружении.
Также можно добавить визуальный индикатор сохранения, чтобы пользователь понимал, что данные не потеряны.