Как сделать автоматическое сохранение записи в 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 через функции без плагинов
13.05.2026
Как удалить определённые метаданные из базы данных WordPress без плагинов
20.04.2026
Как создать динамический фильтрованный список статей в WordPress
26.01.2026
Как избежать проблем с кэшированием в WordPress: практические методы
08.02.2026
Как добавить своё пользовательское поле в REST API WordPress
22.02.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее