WPtickets — мощный плагин для организации поддержки клиентов через систему тикетов в WordPress. Часто возникает задача расширить стандартную форму тикета дополнительными полями, чтобы собирать более точную информацию от пользователей. В этой статье разберём, как добавить пользовательские поля в форму создания тикета WPtickets, отобразить их на фронтенде и сохранить данные в базе. Кроме того, рассмотрим пример кода и упомянем полезные плагины для упрощения задачи.
Почему важно добавлять пользовательские поля в форму тикета
Стандартная форма тикета обычно содержит базовые поля: тема, описание, имя и e-mail. Но иногда этих данных недостаточно для эффективной обработки запроса. Например, для технической поддержки полезно знать модель устройства, версию ПО, тип проблемы и т.д. Добавление кастомных полей позволяет:
- Улучшить качество поддержки за счёт детальной информации;
- Автоматизировать распределение тикетов по категориям и приоритетам;
- Сократить время на уточнение данных у клиента;
- Создать отчёты с учётом дополнительных параметров.
WPtickets не имеет готового визуального конструктора форм, но предоставляет хуки для расширения. Поэтому добавление полей реализуется через код или сторонние плагины.
Добавление пользовательских полей через хук wptickets_before_ticket_form
WPtickets позволяет вставить произвольный HTML в форму создания тикета через хук wptickets_before_ticket_form. На этом примере добавим поле "Модель устройства".
add_action('wptickets_before_ticket_form', 'wptickets_add_custom_ticket_fields');
function wptickets_add_custom_ticket_fields() {
?>
<p>
<label for="wptickets_device_model">Модель устройства (обязательно)</label><br />
<input type="text" name="wptickets_device_model" id="wptickets_device_model" required />
</p>
<?php
}Этот код выведет поле над стандартными элементами формы. Далее нужно обработать и сохранить данные.
Сохранение пользовательских полей при отправке тикета
Для сохранения дополнительного поля используйте хук wptickets_after_ticket_create, который вызывается после создания тикета. Пример кода сохранения поля в метаданные тикета:
add_action('wptickets_after_ticket_create', 'wptickets_save_custom_ticket_fields', 10, 2);
function wptickets_save_custom_ticket_fields($ticket_id, $post_data) {
if (!empty($post_data['wptickets_device_model'])) {
update_post_meta($ticket_id, 'wptickets_device_model', sanitize_text_field($post_data['wptickets_device_model']));
}
}Функция получает ID созданного тикета и данные из формы. С помощью update_post_meta сохраняем модель устройства как мета поле.
Отображение пользовательских полей в админке и на фронтенде
Чтобы видеть эту информацию в списке или в карточке тикета, нужно дополнительно вывести мета данные. Например, для отображения в админке добавьте колонку:
add_filter('manage_wpticket_posts_columns', 'wptickets_add_device_model_column');
function wptickets_add_device_model_column($columns) {
$columns['device_model'] = 'Модель устройства';
return $columns;
}
add_action('manage_wpticket_posts_custom_column', 'wptickets_show_device_model_column', 10, 2);
function wptickets_show_device_model_column($column, $post_id) {
if ($column === 'device_model') {
echo esc_html(get_post_meta($post_id, 'wptickets_device_model', true));
}
}Для вывода на странице отдельного тикета на фронтенде можно подключить мета данные в шаблон, например, через фильтр или в файле темы.
Использование плагинов для расширения форм тикетов
Если вы не хотите писать код, можно использовать плагины для создания кастомных полей, совместимые с WPtickets:
- Clearfy Pro — позволяет улучшить функционал WordPress и подключать дополнительные поля;
- WPRemark — расширение для отзывов, которое можно адаптировать для сбора доп. информации;
- ACF (Advanced Custom Fields) — популярный плагин для создания полей, но его интеграция с WPtickets потребует дополнительного кода.
Чаще всего разработчики комбинируют базовый код с плагинами для удобства и расширяемости.
Рекомендации по валидации и безопасности пользовательских полей
При добавлении кастомных полей важно:
- Использовать
sanitize_text_fieldили аналогичные функции для очистки данных; - Добавлять обязательные поля с атрибутом
requiredи проверять их наличие на сервере; - Проверять данные по типу и длине, чтобы избежать ошибок и потенциальных уязвимостей;
- Обеспечивать защиту форм с помощью nonce и других WP механизмов.
Это позволит избежать проблем с безопасностью и корректно обрабатывать данные.
Пример комплексного кода для добавления и сохранения нескольких полей
add_action('wptickets_before_ticket_form', 'wptickets_add_custom_fields');
function wptickets_add_custom_fields() {
?>
<p>
<label for="wptickets_device_model">Модель устройства (обязательно)</label><br />
<input type="text" name="wptickets_device_model" id="wptickets_device_model" required />
</p>
<p>
<label for="wptickets_os_version">Версия ОС</label><br />
<input type="text" name="wptickets_os_version" id="wptickets_os_version" />
</p>
<p>
<label for="wptickets_issue_type">Тип проблемы</label><br />
<select name="wptickets_issue_type" id="wptickets_issue_type">
<option value="bug">Ошибка</option>
<option value="feature">Фича</option>
<option value="question">Вопрос</option>
</select>
</p>
<?php
}
add_action('wptickets_after_ticket_create', 'wptickets_save_custom_fields', 10, 2);
function wptickets_save_custom_fields($ticket_id, $post_data) {
if (!empty($post_data['wptickets_device_model'])) {
update_post_meta($ticket_id, 'wptickets_device_model', sanitize_text_field($post_data['wptickets_device_model']));
}
if (!empty($post_data['wptickets_os_version'])) {
update_post_meta($ticket_id, 'wptickets_os_version', sanitize_text_field($post_data['wptickets_os_version']));
}
if (!empty($post_data['wptickets_issue_type'])) {
update_post_meta($ticket_id, 'wptickets_issue_type', sanitize_text_field($post_data['wptickets_issue_type']));
}
}Этот код добавляет три поля, сохраняет их и готов к дальнейшему использованию в админке или для автоматизации.
Заключение по теме
Добавление пользовательских полей в форму тикета WPtickets — ключевой шаг для создания продвинутой системы поддержки. Это позволяет получать более структурированную информацию и эффективно её обрабатывать. Используйте хуки WPtickets, соблюдайте безопасность и валидацию данных, комбинируйте код с полезными плагинами, чтобы создать удобный и функциональный сервис поддержки клиентов.