Для эффективного управления большим количеством тикетов в WordPress с использованием плагина WPtickets крайне важно иметь возможность быстро и удобно фильтровать тикеты по разным критериям и пользовательским свойствам. В этой статье мы подробно рассмотрим, как создать комплексный фильтр тикетов, который позволит значительно упростить работу службы поддержки и повысить скорость обработки запросов.
Почему комплексный фильтр важен для WPtickets
Плагин WPtickets из коробки предоставляет базовые возможности фильтрации по статусу, приоритету и агенту. Однако, в реальной работе часто требуется более гибкий подход, позволяющий фильтровать тикеты по дополнительным пользовательским полям, дате создания, меткам и другим параметрам.
Комплексный фильтр поможет:
- сократить время поиска нужных тикетов;
- упростить сортировку по нескольким критериям одновременно;
- автоматизировать процессы обработки, например, выделять срочные тикеты с определёнными свойствами;
- предоставить агентам удобный интерфейс для работы с тикетами.
Рассмотрим, как реализовать такой фильтр на примере кастомного кода и полезных плагинов.
Добавление пользовательских полей в WPtickets
Прежде чем создавать фильтр, необходимо убедиться, что тикеты содержат нужные свойства. В WPtickets можно добавить пользовательские поля с помощью хуков или при помощи плагина Clearfy Pro, который позволяет расширять функционал и добавлять кастомные метаполя.
Пример добавления пользовательского поля «Тип запроса» через код:
add_action('wptickets_ticket_custom_fields', 'wpticketsru_add_custom_ticket_field');
function wpticketsru_add_custom_ticket_field($ticket_id) {
$value = get_post_meta($ticket_id, '_wpticketsru_request_type', true);
echo '<p><label>Тип запроса:</label><select name="wpticketsru_request_type">';
$options = ['Общий', 'Технический', 'Биллинг'];
foreach ($options as $option) {
$selected = selected($value, $option, false);
echo "<option value=\"$option\" $selected>$option</option>";
}
echo '</select></p>';
}
add_action('wptickets_ticket_save', 'wpticketsru_save_custom_ticket_field');
function wpticketsru_save_custom_ticket_field($ticket_id) {
if (isset($_POST['wpticketsru_request_type'])) {
update_post_meta($ticket_id, '_wpticketsru_request_type', sanitize_text_field($_POST['wpticketsru_request_type']));
}
}
Этот код добавляет выпадающий список с типами запроса на страницу создания и редактирования тикета, а также сохраняет выбранное значение.
Реализация комплексного фильтра по нескольким свойствам
Теперь, когда у нас есть пользовательские поля, перейдём к созданию фильтра. В административной части WPtickets нужно добавить форму фильтрации с возможностью выбора нескольких параметров. Для этого используем хук restrict_manage_posts и фильтруем запрос с помощью pre_get_posts.
Добавление фильтра в админке
add_action('restrict_manage_posts', 'wpticketsru_add_custom_filters');
function wpticketsru_add_custom_filters() {
global $typenow;
if ($typenow !== 'wpticket') return;
// Фильтр по типу запроса
$request_type = isset($_GET['wpticketsru_request_type_filter']) ? sanitize_text_field($_GET['wpticketsru_request_type_filter']) : '';
$options = ['' => 'Все типы', 'Общий' => 'Общий', 'Технический' => 'Технический', 'Биллинг' => 'Биллинг'];
echo '<select name="wpticketsru_request_type_filter">';
foreach ($options as $key => $label) {
$selected = selected($request_type, $key, false);
echo "<option value=\"$key\" $selected>$label</option>";
}
echo '</select>';
// Можно добавить другие фильтры по дате или статусу
}
Обработка фильтрации в запросе
add_action('pre_get_posts', 'wpticketsru_filter_tickets_query');
function wpticketsru_filter_tickets_query($query) {
global $pagenow;
$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : '';
if ($pagenow == 'edit.php' && $post_type == 'wpticket' && $query->is_main_query()) {
if (!empty($_GET['wpticketsru_request_type_filter'])) {
$meta_query = array(
array(
'key' => '_wpticketsru_request_type',
'value' => sanitize_text_field($_GET['wpticketsru_request_type_filter']),
'compare' => '=',
),
);
$query->set('meta_query', $meta_query);
}
// Можно добавить обработку других фильтров
}
}
Таким образом, при выборе в фильтре определённого типа запроса, список тикетов будет обновляться с учётом этого параметра.
Расширение фильтра: фильтрация по дате и статусу
Для комплексного фильтра полезно добавить возможность выбирать тикеты по дате создания и статусу. WPtickets уже использует стандартные статусы, но можно добавить кастомные или использовать существующие.
Добавим фильтр по дате:
add_action('restrict_manage_posts', 'wpticketsru_add_date_filter');
function wpticketsru_add_date_filter() {
global $typenow;
if ($typenow !== 'wpticket') return;
$date_filter = isset($_GET['wpticketsru_date_filter']) ? sanitize_text_field($_GET['wpticketsru_date_filter']) : '';
$options = ['' => 'Все даты', 'today' => 'Сегодня', 'last_7_days' => 'За последние 7 дней', 'last_30_days' => 'За последние 30 дней'];
echo '<select name="wpticketsru_date_filter">';
foreach ($options as $key => $label) {
$selected = selected($date_filter, $key, false);
echo "<option value=\"$key\" $selected>$label</option>";
}
echo '</select>';
}
add_action('pre_get_posts', 'wpticketsru_filter_tickets_by_date');
function wpticketsru_filter_tickets_by_date($query) {
global $pagenow;
$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : '';
if ($pagenow == 'edit.php' && $post_type == 'wpticket' && $query->is_main_query()) {
if (!empty($_GET['wpticketsru_date_filter'])) {
$date_filter = sanitize_text_field($_GET['wpticketsru_date_filter']);
$date_query = [];
switch ($date_filter) {
case 'today':
$date_query = ['after' => 'today'];
break;
case 'last_7_days':
$date_query = ['after' => '7 days ago'];
break;
case 'last_30_days':
$date_query = ['after' => '30 days ago'];
break;
}
if ($date_query) {
$query->set('date_query', [$date_query]);
}
}
}
}
Теперь можно быстро отфильтровать тикеты по времени создания.
Использование плагинов для расширения фильтрации
Если хочется получить более удобный интерфейс и расширенные возможности фильтрации без глубокого программирования, рекомендуем обратить внимание на плагины:
- ABC Pagination — дополнительно улучшает пагинацию и фильтрацию записей;
- Clearfy Pro — расширяет возможности управления метаполями и хуками в WPtickets;
- WPRemark — автоматизация работы с отзывами и комментариями, может быть полезен для дополнения тикетов.
Использование этих инструментов позволит легко масштабировать функциональность фильтрации и адаптировать её под конкретные задачи.
Советы по оптимизации фильтрации и производительности
При добавлении сложных фильтров и работе с большим количеством тикетов важно следить за производительностью:
- используйте индексирование метаполей в базе данных для ускорения запросов;
- по возможности кешируйте результаты фильтрации, чтобы снизить нагрузку на сервер;
- ограничивайте количество выводимых тикетов на странице с помощью пагинации;
- тестируйте фильтры на разных объемах данных перед внедрением в продакшн.
Эти меры помогут избежать тормозов и ошибок при работе с большим числом обращений.
Вывод
Создание комплексного фильтра по свойствам тикетов в WPtickets — это эффективный способ улучшить работу службы поддержки, сделать управление заявками удобным и быстрым. Используя предложенный код и рекомендации, вы сможете настроить фильтрацию под любые нужды без больших затрат времени и ресурсов.
Для более глубокого расширения возможностей рекомендуем изучить плагины из WPShop.ru с UTM-метками для вашего удобства.