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

Автоматическое сохранение записи (Auto Save) — важная функция, которая помогает избежать потери данных при работе с редактором WordPress. По умолчанию WordPress уже реализует автосохранение, но иногда нам нужно расширить или изменить этот функционал под свои задачи, например, добавить автоматическое сохранение в кастомных типах записей или при использовании сторонних редакторов.

Особенности автосохранения в WordPress и зачем нужна своя реализация

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

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

Ниже разберём пример создания плагина, который добавит автоматическое сохранение для кастомного типа записей с помощью AJAX-запросов.

Создание плагина для автоматического сохранения кастомных записей

Начнём с создания минимального плагина. Для примера создадим кастомный тип записи "wpexpert_note" и добавим для него автосохранение.

Регистрация кастомного типа записи

function wpexpert_register_custom_post_type() {
    $args = array(
        'labels' => array(
            'name' => 'Заметки',
            'singular_name' => 'Заметка',
        ),
        'public' => true,
        'supports' => array('title', 'editor'),
        'show_in_rest' => true,
    );
    register_post_type('wpexpert_note', $args);
}
add_action('init', 'wpexpert_register_custom_post_type');

Эта функция создаст новый тип записей "Заметки" с поддержкой заголовка и контента.

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

Нужно добавить скрипт, который будет отправлять AJAX-запрос на сервер с содержимым записи для сохранения.

function wpexpert_enqueue_autosave_script($hook) {
    global $post;
    if (($hook == 'post-new.php' || $hook == 'post.php') && $post->post_type == 'wpexpert_note') {
        wp_enqueue_script('wpexpert-autosave', plugin_dir_url(__FILE__) . 'autosave.js', array('jquery'), '1.0', true);
        wp_localize_script('wpexpert-autosave', 'wpexpertData', array(
            'ajax_url' => admin_url('admin-ajax.php'),
            'post_id' => $post->ID,
            'nonce' => wp_create_nonce('wpexpert_autosave_nonce'),
        ));
    }
}
add_action('admin_enqueue_scripts', 'wpexpert_enqueue_autosave_script');

Этот код подключит скрипт autosave.js только на страницах редактирования заметок и передаст необходимые параметры для AJAX.

Написание JS скрипта autosave.js

Создайте файл autosave.js в папке плагина с таким содержанием:

jQuery(document).ready(function($) {
    function wpexpertAutoSave() {
        var data = {
            action: 'wpexpert_autosave',
            post_id: wpexpertData.post_id,
            nonce: wpexpertData.nonce,
            title: $('#title').val(),
            content: $('#content').val(),
        };

        $.post(wpexpertData.ajax_url, data, function(response) {
            if(response.success) {
                console.log('Запись автоматически сохранена');
            } else {
                console.log('Ошибка автосохранения: ' + response.data);
            }
        });
    }

    // Автосохранение каждые 30 секунд
    setInterval(wpexpertAutoSave, 30000);
});

Здесь мы отправляем на сервер ID записи, nonce для безопасности, а также заголовок и контент из полей формы.

Обработка AJAX-запроса в PHP

function wpexpert_handle_autosave() {
    check_ajax_referer('wpexpert_autosave_nonce', 'nonce');

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

    if (!$post_id || get_post_type($post_id) !== 'wpexpert_note') {
        wp_send_json_error('Неверный ID записи');
    }

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

    $result = wp_update_post($post_data, true);

    if (is_wp_error($result)) {
        wp_send_json_error($result->get_error_message());
    } else {
        wp_send_json_success();
    }
}
add_action('wp_ajax_wpexpert_autosave', 'wpexpert_handle_autosave');

Эта функция проверяет безопасность, валидирует данные и обновляет запись. В ответ отправляется JSON с результатом.

Расширение функциональности автосохранения

Данный пример — базовый, но его можно значительно расширить. Например:

  • Добавить автосохранение мета-полей с помощью get_post_meta и update_post_meta.
  • Реализовать дебаунсинг (отложенный вызов), чтобы не отправлять запросы слишком часто.
  • Добавить уведомления пользователю о статусе автосохранения в интерфейсе.
  • Интегрировать с плагинами, например, Clearfy Pro для оптимизации запросов.

Также для улучшения UX можно добавить кнопку "Сохранить сейчас" с тем же AJAX-запросом.

Другие плагины и инструменты для автосохранения

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

  • Clearfy Pro — ускоряет и оптимизирует работу WordPress, включая функции автосохранения.
  • Плагин "Auto Save Draft" — расширяет стандартное автосохранение, позволяя настраивать частоту и условия.

Подключение таких плагинов поможет избежать собственных ошибок и расширить возможности без лишнего кода.

Советы по отладке автосохранения

Если автосохранение не работает, проверьте:

  • Правильность nonce и безопасность AJAX-запросов.
  • Совместимость с другими плагинами, отключая подозрительные по очереди.
  • Консоль браузера на наличие ошибок JavaScript.
  • Логи сервера на ошибки PHP.

Для отладки можно добавить error_log в обработчик AJAX или использовать плагины для логирования.

WooCommerce: использование хука woocommerce_checkout_update_order_review для дополнительной валидации на этапе оформления
29.05.2026
Как использовать хуки для добавления функционала в WordPress
15.01.2026
Автоматическое удаление незавершённых заказов в WooCommerce
29.04.2026
Как удалить неиспользуемые виджеты в WordPress: практическое руководство
11.03.2026
Как автоматически отключать неиспользуемые плагины в WordPress
06.04.2026