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

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

Почему важно автоматическое сохранение в WordPress

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

Преимущества собственного автосохранения:

  • Настройка частоты сохранения под конкретные типы записей.
  • Сохранение дополнительных метаданных и кастомных полей.
  • Логирование и уведомления о сохранениях.
  • Повышение безопасности через проверку nonce и прав пользователя.

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

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

Шаг 1. Создаём папку и файл плагина

В директории wp-content/plugins/ создайте папку wp8-autosave. В ней создайте файл wp8-autosave.php с заголовком плагина:

<?php
/**
 * Plugin Name: WP8 Автосохранение записей
 * Description: Плагин для автоматического сохранения записей через AJAX
 * Version: 1.0
 * Author: WP8
 */

// Защита от прямого запуска
if (!defined('ABSPATH')) {
    exit;
}

Шаг 2. Регистрируем AJAX-обработчик

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

add_action('wp_ajax_wp8_autosave_post', 'wp8_autosave_post_callback');

function wp8_autosave_post_callback() {
    // Проверка nonce для безопасности
    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'wp8_autosave_nonce')) {
        wp_send_json_error('Ошибка безопасности');
        wp_die();
    }

    // Проверка прав пользователя
    if (!current_user_can('edit_post', intval($_POST['post_id']))) {
        wp_send_json_error('Нет доступа для редактирования');
        wp_die();
    }

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

    $updated_post = array(
        'ID'           => $post_id,
        'post_content' => $post_content,
    );

    $result = wp_update_post($updated_post, true);

    if (is_wp_error($result)) {
        wp_send_json_error($result->get_error_message());
    } else {
        wp_send_json_success('Сохранено');
    }
    wp_die();
}

Шаг 3. Подключаем скрипт для отправки данных

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

add_action('admin_enqueue_scripts', 'wp8_enqueue_autosave_script');

function wp8_enqueue_autosave_script($hook) {
    if ($hook != 'post.php' && $hook != 'post-new.php') {
        return;
    }

    wp_enqueue_script('wp8-autosave-js', plugin_dir_url(__FILE__) . 'autosave.js', array('jquery'), '1.0', true);
    wp_localize_script('wp8-autosave-js', 'wp8_autosave_params', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('wp8_autosave_nonce'),
    ));
}

Шаг 4. Создаём файл autosave.js

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

(function($){
    var timer;
    var delay = 5000; // Интервал автосохранения в миллисекундах

    function wp8_autosave() {
        var post_id = $('#post_ID').val();
        var content = $('#content').val();

        $.post(wp8_autosave_params.ajax_url, {
            action: 'wp8_autosave_post',
            post_id: post_id,
            content: content,
            nonce: wp8_autosave_params.nonce
        }, function(response) {
            if (response.success) {
                console.log('Запись автосохранена');
            } else {
                console.error('Ошибка автосохранения:', response.data);
            }
        });
    }

    $(document).ready(function() {
        $('#content').on('input', function() {
            clearTimeout(timer);
            timer = setTimeout(wp8_autosave, delay);
        });
    });
})(jQuery);

Настройка и улучшение плагина

Поддержка кастомных типов полей и редакторов

Если вы используете Gutenberg или кастомные поля, код нужно адаптировать. Для Gutenberg можно использовать REST API и JavaScript hooks React. Для метаполей — добавить передачу необходимых данных в AJAX и обработать их в PHP.

Например, для сохранения метаполей в AJAX-запросе добавьте:

$meta_value = sanitize_text_field($_POST['meta_key'] ?? '');
update_post_meta($post_id, 'meta_key', $meta_value);

А в JavaScript — передавайте поле meta_key вместе с другими данными.

Безопасность и производительность

Важно не перенагружать сервер частыми запросами, поэтому интервал автосохранения лучше настраивать исходя из специфики сайта. Также используйте wp_verify_nonce и проверки прав доступа, чтобы исключить несанкционированное сохранение.

Для больших сайтов можно добавить логирование автосохранений и уведомления администратору о проблемах.

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

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

  • Autosave — расширяет стандартное автосохранение;
  • Revision Control — управляет ревизиями записей;
  • WP Automatic — автоматизация публикаций и обновлений.

Однако собственное решение позволяет гибко настраивать процесс и интегрировать автосохранение с вашими бизнес-процессами.

Заключение

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

WooCommerce: установка ограничений на количество товаров в корзине
10.05.2026
Как установить ограничение на число запросов к REST API WordPress
12.04.2026
Как создать собственный шорткод в WordPress с примером кода
03.11.2025
Как настроить разграничение доступа в WordPress для разных ролей
04.03.2026
Как удалить неиспользуемые шорткоды в WordPress
11.03.2026