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

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

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

В системах поддержки клиентов тикеты часто содержат большое количество информации: описание проблемы, вложения, пользовательские поля. Если пользователь случайно закроет браузер или произойдёт сбой, без автосохранения все данные будут потеряны. Это приводит к повторному заполнению формы и снижает удовлетворённость пользователей.

Автосохранение помогает:

  • Сохранять черновики тикетов автоматически;
  • Обеспечивать сохранность данных до отправки;
  • Повысить UX и уменьшить количество отказов;
  • Обеспечить резервное копирование при работе с длинными формами.

Реализация автосохранения в WordPress требует работы с AJAX, JavaScript и серверной частью для сохранения данных в базу.

Варианты реализации автоматического сохранения

1. Использование плагина WP Remark

Плагин WP Remark поддерживает автосохранение заметок и комментариев, что можно адаптировать для тикетов. Он реализует AJAX сохранение и хранит черновики в пользовательских мета-данных.

Преимущества:

  • Готовое решение с хорошей документацией;
  • Легко интегрируется с формами тикетов;
  • Настраиваемая частота сохранения.

2. Самописный код для автосохранения с помощью AJAX

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

Пример кода: автоматическое сохранение данных тикета через AJAX

Для начала добавим JavaScript, который будет отправлять данные формы каждые 30 секунд.

function wpticket_autosave_script() {
    if (is_page('create-ticket')) { // Страница создания тикета
        wp_enqueue_script('wpticket-autosave', get_template_directory_uri() . '/js/wpticket-autosave.js', array('jquery'), null, true);
        wp_localize_script('wpticket-autosave', 'wpticket_ajax', array(
            'ajax_url' => admin_url('admin-ajax.php'),
            'nonce' => wp_create_nonce('wpticket_autosave_nonce')
        ));
    }
}
add_action('wp_enqueue_scripts', 'wpticket_autosave_script');

Файл wpticket-autosave.js:

jQuery(document).ready(function($) {
    function wpticket_autosave() {
        var data = {
            action: 'wpticket_autosave',
            nonce: wpticket_ajax.nonce,
            ticket_content: $('#ticket-content').val(),
            ticket_title: $('#ticket-title').val(),
            ticket_id: $('#ticket-id').val() || 0
        };

        $.post(wpticket_ajax.ajax_url, data, function(response) {
            if(response.success) {
                $('#ticket-id').val(response.data.ticket_id); // сохраняем ID тикета
                console.log('Тикет автосохранён');
            } else {
                console.log('Ошибка автосохранения');
            }
        });
    }

    setInterval(wpticket_autosave, 30000); // каждые 30 секунд
});

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

function wpticket_handle_autosave() {
    check_ajax_referer('wpticket_autosave_nonce', 'nonce');

    $ticket_id = intval($_POST['ticket_id']);
    $title = sanitize_text_field($_POST['ticket_title']);
    $content = sanitize_textarea_field($_POST['ticket_content']);
    $user_id = get_current_user_id();

    $ticket_data = array(
        'post_title' => $title,
        'post_content' => $content,
        'post_type' => 'ticket',
        'post_status' => 'draft',
        'post_author' => $user_id
    );

    if ($ticket_id > 0) {
        $ticket_data['ID'] = $ticket_id;
        $new_ticket_id = wp_update_post($ticket_data, true);
    } else {
        $new_ticket_id = wp_insert_post($ticket_data, true);
    }

    if (is_wp_error($new_ticket_id)) {
        wp_send_json_error();
    } else {
        wp_send_json_success(array('ticket_id' => $new_ticket_id));
    }
}
add_action('wp_ajax_wpticket_autosave', 'wpticket_handle_autosave');

Обработка ошибок и UX

Для лучшего UX добавьте индикатор статуса автосохранения, например, надпись «Сохраняется...» и «Сохранено» после успешного ответа AJAX. Это поможет пользователю понимать, что данные сохранены.

Обрабатывайте ошибки сети и показывайте пользователю предупреждение при невозможности сохранить тикет.

Советы по оптимизации

  • Ограничьте частоту автосохранения (например, 30 секунд), чтобы не перегружать сервер;
  • Сохраняйте только изменённые данные, отслеживая изменения в полях;
  • Используйте кастомные метаполя для хранения дополнительных данных тикетов;
  • Реализуйте очистку старых черновиков, чтобы база не разрасталась.

Интеграция с плагином Clearfy Pro для оптимизации

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

Заключение

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

Как создать автоматический импорт тикетов в WordPress
07.03.2026
Как решить проблему не работающих AJAX-запросов в тикет-системе WordPress
21.05.2026
Как автоматически удалять старые тикеты в WordPress
23.04.2026
Как использовать REST API для создания простой тикет-системы в WordPress
05.12.2025
Как удалить неиспользуемые плагины WordPress без остатков
07.05.2026