wpload.ru wordpress WPLoad.ru

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

В стандартной установке 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 для создания сложных запросов, когда нужно программно получать нужные черновики.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше