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