Как создать систему привязки тикетов к пользователям в WordPress

В современных сервисных порталах и сайтах поддержки клиентов часто возникает задача делать тикеты (заявки, обращения) привязанными к конкретным пользователям. Это позволяет не только хранить историю обращений, но и управлять доступом, уведомлениями и статусами. В этой статье подробно рассмотрим, как реализовать такую систему в WordPress с помощью собственного кода и плагинов.

Почему важна привязка тикетов к пользователям

Без привязки тикетов к пользователям система поддержки превращается в хаос: заявки можно легко перепутать, сложно фильтровать их по владельцам, а клиентам неудобно видеть свои обращения.

Привязка позволяет:

  • Отображать клиенту только его тикеты в личном кабинете.
  • Отправлять уведомления именно тому пользователю, который создал тикет.
  • Управлять правами доступа — кто может смотреть, редактировать или закрывать тикет.
  • Анализировать статистику по обращениям пользователей.

В WordPress это достигается за счет использования Custom Post Type и пользовательских полей, а также связей с пользователями.

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

Первым шагом создадим тип записи для тикетов и добавим мета-поле для хранения ID пользователя, который создал тикет.

Регистрируем тип записи

function wpticket_register_ticket_post_type() {
    $labels = array(
        'name'               => 'Тикеты',
        'singular_name'      => 'Тикет',
        'menu_name'          => 'Тикеты',
        'name_admin_bar'     => 'Тикет',
        'add_new'            => 'Добавить новый',
        'add_new_item'       => 'Добавить новый тикет',
        'edit_item'          => 'Редактировать тикет',
        'new_item'           => 'Новый тикет',
        'view_item'          => 'Посмотреть тикет',
        'search_items'       => 'Поиск тикетов',
        'not_found'          => 'Тикеты не найдены',
        'not_found_in_trash' => 'В корзине тикеты не найдены'
    );

    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'has_archive'        => true,
        'show_in_rest'       => true,
        'supports'           => array('title', 'editor', 'author', 'custom-fields'),
        'capability_type'    => 'post',
        'menu_position'      => 5,
        'menu_icon'          => 'dashicons-tickets-alt'
    );

    register_post_type('wpticket_ticket', $args);
}
add_action('init', 'wpticket_register_ticket_post_type');

Данный код создаст новый тип записи с названием "Тикеты". Важно, что мы используем поддержку 'author', чтобы автоматически привязывать тикет к пользователю, который его создал.

Привязываем тикет к пользователю автоматически при создании

Чтобы гарантировать, что тикет будет связан с текущим пользователем, добавим следующий код:

function wpticket_set_ticket_author($post_id, $post, $update) {
    if ($post->post_type !== 'wpticket_ticket') {
        return;
    }
    if ($update) {
        return; // Только при создании
    }

    $current_user = wp_get_current_user();
    if ($current_user->ID) {
        // Обновляем автора тикета
        remove_action('save_post', 'wpticket_set_ticket_author', 10);
        wp_update_post(array(
            'ID' => $post_id,
            'post_author' => $current_user->ID
        ));
        add_action('save_post', 'wpticket_set_ticket_author', 10, 3);
    }
}
add_action('save_post', 'wpticket_set_ticket_author', 10, 3);

Теперь при создании тикета он автоматически будет связан с авторизованным пользователем. Это базовый способ, который можно расширить.

Отображение тикетов пользователя в личном кабинете

Для удобства клиентов стоит сделать страницу, где пользователь будет видеть только свои тикеты. Это можно сделать с помощью WP_Query с фильтром по автору.

Пример кода для вывода тикетов пользователя

function wpticket_show_user_tickets() {
    if (!is_user_logged_in()) {
        return '<p>Пожалуйста, войдите, чтобы просмотреть свои тикеты.</p>';
    }

    $current_user_id = get_current_user_id();

    $args = array(
        'post_type' => 'wpticket_ticket',
        'author' => $current_user_id,
        'posts_per_page' => 10,
        'orderby' => 'date',
        'order' => 'DESC'
    );

    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return '<p>Тикетов пока нет.</p>';
    }

    $output = '<ul class="wpticket-user-tickets">';
    while ($query->have_posts()) {
        $query->the_post();
        $output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a> – ' . get_the_date() . '</li>';
    }
    $output .= '</ul>';

    wp_reset_postdata();

    return $output;
}
add_shortcode('wpticket_user_tickets', 'wpticket_show_user_tickets');

Этот шорткод [wpticket_user_tickets] можно вставить в любую страницу для отображения списка тикетов текущего пользователя.

Управление доступом и ролями

Чтобы обеспечить безопасность, нужно ограничить, кто может видеть и редактировать тикеты. Например, клиенты должны видеть только свои тикеты, а администраторы и поддержка — все.

Пример ограничения доступа к тикетам

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

function wpticket_filter_tickets_by_author($query) {
    global $pagenow;

    if (!is_admin() || $pagenow !== 'edit.php' || !isset($query->query['post_type']) || $query->query['post_type'] !== 'wpticket_ticket') {
        return;
    }

    if (!current_user_can('manage_options')) { // Админы видят все
        $query->set('author', get_current_user_id());
    }
}
add_action('pre_get_posts', 'wpticket_filter_tickets_by_author');

Так пользователи без прав администратора увидят только свои тикеты в админке.

Использование плагинов для расширения функционала тикетов

Если хотите ускорить разработку или получить дополнительные возможности, можно рассмотреть плагины:

  • Expert Review — для организации отзывов и тикетов, с удобным интерфейсом и кастомизацией.
  • WPRemark — система комментариев и тикетов с расширенными настройками прав и уведомлений.

Эти плагины позволяют быстро создать полноценную систему тикетов с привязкой к пользователям и мощными инструментами управления.

Автоматизация уведомлений о новых тикетах пользователям

Для улучшения клиентского опыта важно отправлять уведомления пользователям при создании или обновлении тикетов.

Пример отправки email уведомления при создании тикета

function wpticket_send_notification_on_new_ticket($post_id, $post, $update) {
    if ($post->post_type !== 'wpticket_ticket' || $update) {
        return;
    }

    $user = get_userdata($post->post_author);
    if (!$user) {
        return;
    }

    $to = $user->user_email;
    $subject = 'Новый тикет создан';
    $message = 'Здравствуйте, ' . $user->display_name . "!\n"
        . "Вы создали новый тикет: " . $post->post_title . "\n"
        . "Ссылка: " . get_permalink($post_id) . "\n"
        . "Спасибо, что используете наш сервис.";

    wp_mail($to, $subject, $message);
}
add_action('wp_insert_post', 'wpticket_send_notification_on_new_ticket', 10, 3);

Этот код отправит простое уведомление на email пользователя сразу после создания тикета.

Выводы и рекомендации

Система привязки тикетов к пользователям — ключевой элемент организации службы поддержки на WordPress. Создать ее можно самостоятельно, используя Custom Post Type и стандартные хуки WordPress, а можно ускорить процесс с помощью специализированных плагинов.

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

Используйте приведенные примеры кода как каркас и расширяйте их под свои задачи.

Как настроить разрешения и ролевую систему в тикет-системе WordPress
16.02.2026
Как создать двухуровневую систему разрешений в WordPress для тикетов
24.03.2026
Как настроить автозаполнение форм в WordPress с помощью AJAX
28.03.2026
Как автоматически удалять старые тикеты в WordPress
23.04.2026
Как добавить автоматическую отправку отчетов в WordPress
10.04.2026