Создание комплексного фильтра по свойствам тикетов в WPtickets для WordPress

Для эффективного управления большим количеством тикетов в 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-метками для вашего удобства.

Автоматизация обработки тикетов в WordPress: практическое руководство
13.12.2025
Как использовать хуки для передачи данных между виджетами в WordPress
05.12.2025
Как создать автоматический импорт тикетов в WordPress
23.03.2026
Как создать удобный инструмент импорта тикетов в WPtickets для WordPress
15.02.2026
Как создать простую систему подписчиков в WordPress
11.11.2025