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

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

Почему стоит реализовать дополнительное автоматическое сохранение черновиков

Стандартное автосохранение в WordPress ограничено и не подходит для всех сценариев. Например, при работе с большими текстами или сложными блоками часто требуется более частое сохранение. Кроме того, иногда нужен функционал, который сохраняет черновики на внешние сервисы или в отдельную таблицу БД, чтобы минимизировать риск потери контента.

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

Пример решения: добавляем автоматическое сохранение с помощью AJAX и WP Cron

Ниже представлен пример, как можно реализовать автоматическое сохранение черновиков с частотой в 15 секунд по AJAX, используя собственный PHP-обработчик и JavaScript. Такой подход даст вам гибкость и позволит расширять функционал.

1. Регистрация AJAX-обработчика в functions.php

add_action('wp_ajax_wpedu_auto_save_draft', 'wpedu_auto_save_draft_callback');
function wpedu_auto_save_draft_callback() {
    if (!current_user_can('edit_posts')) {
        wp_send_json_error('Нет прав');
    }

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

    if (!$post_id || empty($content)) {
        wp_send_json_error('Параметры не переданы');
    }

    $post = get_post($post_id);
    if (!$post) {
        wp_send_json_error('Пост не найден');
    }

    $update = wp_update_post([
        'ID' => $post_id,
        'post_content' => $content,
        'post_status' => 'draft'
    ], true);

    if (is_wp_error($update)) {
        wp_send_json_error('Ошибка сохранения');
    }

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

2. Добавляем JavaScript для автосохранения

Этот скрипт можно добавить в админскую часть редактора или в кастомный плагин:

jQuery(document).ready(function($) {
    var autoSaveInterval = 15000; // 15 секунд
    var postId = $('#post_ID').val();

    function wpeduAutoSaveDraft() {
        var content = wp.data.select('core/editor').getEditedPostContent();
        $.post(ajaxurl, {
            action: 'wpedu_auto_save_draft',
            post_id: postId,
            content: content,
        }, function(response) {
            if (response.success) {
                console.log('Авто-сохранение: ' + response.data);
            } else {
                console.error('Ошибка авто-сохранения: ' + response.data);
            }
        });
    }

    setInterval(wpeduAutoSaveDraft, autoSaveInterval);
});

Как улучшить функционал: интеграция с плагинами WPShop

Для тех, кто использует продукты WPShop, можно расширить автоматическое сохранение, например, подключив Clearfy Pro. Этот плагин поможет оптимизировать работу редактора и снизить нагрузку на сервер при частом сохранении.

Также можно использовать WPRemark для добавления комментариев к черновикам и контроля версий прямо в процессе автосохранения.

Как настроить частоту автосохранения через WP Cron

Если вы хотите, чтобы автосохранение происходило в фоне без участия пользователя, можно использовать WP Cron. Например, запускать задачу каждые 5 минут, которая будет сохранять черновики с пометкой "автоматически сохранено".

function wpedu_schedule_auto_save() {
    if (!wp_next_scheduled('wpedu_cron_auto_save')) {
        wp_schedule_event(time(), 'five_minutes', 'wpedu_cron_auto_save');
    }
}
add_action('wp', 'wpedu_schedule_auto_save');

add_action('wpedu_cron_auto_save', 'wpedu_auto_save_all_drafts');
function wpedu_auto_save_all_drafts() {
    $args = [
        'post_type' => 'post',
        'post_status' => 'draft',
        'numberposts' => -1,
    ];
    $drafts = get_posts($args);

    foreach ($drafts as $draft) {
        $new_content = $draft->post_content . "\n\n<!-- Автоматическое сохранение " . current_time('mysql') . " -->";
        wp_update_post([
            'ID' => $draft->ID,
            'post_content' => $new_content
        ]);
    }
}

// Регистрируем интервал 5 минут
add_filter('cron_schedules', function($schedules) {
    $schedules['five_minutes'] = [
        'interval' => 300,
        'display' => 'Каждые 5 минут'
    ];
    return $schedules;
});

Резюме и рекомендации по внедрению

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

Используйте приведённый код как отправную точку, дополняйте его проверками, уведомлениями и интеграцией с другими сервисами для максимального удобства редакторов и авторов вашего сайта.

⭐⭐⭐⭐⭐