Как добавить автоматическое сохранение черновиков в WordPress

Автоматическое сохранение черновиков — важная функция для любого сайта на WordPress, особенно если вы часто работаете с длинными или сложными материалами. Стандартный механизм автосохранения WordPress сохраняет контент каждые 60 секунд, но иногда этого недостаточно, или нужно добавить дополнительные возможности по контролю и уведомлениям. В этой статье мы подробно рассмотрим, как реализовать более гибкое и надежное автоматическое сохранение черновиков с помощью собственного кода и полезных плагинов.

Почему стандартного автосохранения WordPress может быть недостаточно

Встроенный механизм автосохранения WordPress сохраняет изменения каждые 60 секунд, создавая отдельный ревизионный пост-черновик. Это работает, но у него есть ряд ограничений:

  • Интервал автосохранения нельзя изменить через настройки, нужна доработка кода.
  • Нет информирования пользователя о сохранении или проблемах.
  • Автосохранения не всегда защищают от потери данных, если браузер или сессия неожиданно закрываются.
  • Отсутствует возможность кастомизации логики сохранения для специализированных типов записей.

Поэтому часто необходимо расширить функционал автосохранения, особенно для сайтов с большим объемом контента и сложной структурой.

Как изменить интервал автосохранения черновиков в WordPress

Для начала разберемся, как сделать более частое или редкое автосохранение. WordPress использует константу AUTOSAVE_INTERVAL, которую можно переопределить в файле wp-config.php или в теме/плагине.

define('AUTOSAVE_INTERVAL', 30); // интервал в секундах, например 30 секунд

Если вы хотите сделать это динамически в плагине или functions.php темы, можно использовать фильтр autosave_interval:

add_filter('autosave_interval', 'wpgenerate_autosave_interval');
function wpgenerate_autosave_interval() {
    return 30; // автосохранение каждые 30 секунд
}

Это простое решение, но его стоит использовать с осторожностью, чтобы не перегружать сервер слишком частыми запросами.

Добавление уведомлений о статусе автосохранения

Пользователь должен понимать, что данные успешно сохранились. Для этого можно добавить в редактор визуальный индикатор статуса автосохранения с помощью JavaScript, используя события WordPress и REST API.

Пример простого скрипта, который выводит уведомление в админке при успешном автосохранении:

function wpgenerate_autosave_notification() {
    ?>
    <script>
    jQuery(document).ready(function($) {
        $(document).on('autosave', function() {
            $('#wpgenerate-autosave-status').remove();
            $('<div id="wpgenerate-autosave-status" style="position: fixed; bottom: 10px; right: 10px; background: #46b450; color: white; padding: 5px 10px; border-radius: 3px; z-index: 9999;">Автосохранение успешно</div>').appendTo('body').fadeOut(3000);
        });
    });
    </script>
    <?php
}
add_action('admin_footer-post.php', 'wpgenerate_autosave_notification');
add_action('admin_footer-post-new.php', 'wpgenerate_autosave_notification');

Этот код добавляет небольшое всплывающее сообщение внизу экрана при срабатывании события автосохранения.

Улучшенные плагины для автосохранения и управления черновиками

Если хочется готовое решение с расширенными функциями, рекомендую обратить внимание на следующие плагины:

  • WP Autosave — добавляет более частое автосохранение, поддерживает уведомления и позволяет настроить поведение.
  • Clearfy Pro — платный плагин с набором оптимизаций, в том числе улучшенным автосохранением и контролем ревизий.
  • WPRemark — позволяет добавлять заметки и комментарии к черновикам, что удобно при командной работе.

Как создать кастомное автоматическое сохранение для типов записей

Иногда нужно не просто автосохранение стандартного поста, а более сложная логика, например, для пользовательских типов записей (custom post types). Рассмотрим пример, как можно создать функцию, которая будет сохранять черновик кастомного типа 'product' через AJAX с дополнительной валидацией.

add_action('wp_ajax_wpgenerate_save_product_draft', 'wpgenerate_save_product_draft');
function wpgenerate_save_product_draft() {
    if (!current_user_can('edit_posts')) {
        wp_send_json_error('Нет прав на редактирование');
    }

    $post_id = intval($_POST['post_id']);
    $title = sanitize_text_field($_POST['title']);
    $content = wp_kses_post($_POST['content']);

    if (empty($title)) {
        wp_send_json_error('Заголовок обязателен');
    }

    $post_data = array(
        'ID' => $post_id,
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'draft',
        'post_type' => 'product',
    );

    $updated_id = wp_update_post($post_data, true);

    if (is_wp_error($updated_id)) {
        wp_send_json_error($updated_id->get_error_message());
    }

    wp_send_json_success('Черновик сохранен');
}

Далее на стороне JavaScript можно настроить периодический AJAX-запрос на этот обработчик для сохранения данных.

Пример JavaScript для периодического автосохранения

jQuery(document).ready(function($) {
    setInterval(function() {
        var postId = $('#post_ID').val();
        var title = $('#title').val();
        var content = tinymce.get('content').getContent();

        $.post(ajaxurl, {
            action: 'wpgenerate_save_product_draft',
            post_id: postId,
            title: title,
            content: content
        }, function(response) {
            if (response.success) {
                console.log('Черновик сохранен');
            } else {
                console.error('Ошибка сохранения: ' + response.data);
            }
        });
    }, 30000); // каждые 30 секунд
});

Советы по оптимизации автосохранения и ревизий

Для крупных проектов важно контролировать количество ревизий и нагрузку от автосохранения. Рекомендации:

  • Ограничьте количество ревизий в wp-config.php, например: define('WP_POST_REVISIONS', 5);
  • Регулярно очищайте старые ревизии с помощью плагинов или SQL-запросов.
  • Настраивайте интервал автосохранения так, чтобы балансировать между безопасностью и нагрузкой.
  • Добавляйте уведомления и интерфейс для пользователей, чтобы они видели статус сохранения.

Правильная настройка автосохранения существенно снижает риск потери данных и повышает удобство работы с контентом.

WooCommerce: автоматическое удаление неактивных пользователей по дате последнего заказа
06.06.2026
Как удалить или изменить автора постов в WordPress без плагинов
06.12.2025
Как автоматически отправлять сообщения в Telegram из WordPress
25.02.2026
Как создать динамическое меню в WordPress с применением wp_nav_menu и кастомных walker-классов
18.12.2025
Как автоматически отображать последние посты в рассылках WordPress
18.01.2026