Как создать систему поддержки (тикетов) в WordPress

Что такое система поддержки (тикетов) и зачем она нужна на сайте WordPress

Система поддержки или тикет-система — это инструмент, который помогает организовать общение с клиентами, посетителями или пользователями сайта. Вместо получения писем на почту и их потери в потоке сообщений, тикет-система собирает все запросы в одном месте, позволяет отслеживать статус решения задач и повышает качество обслуживания.

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

Также разберём основные требования к такой системе и дадим рекомендации по настройке.

Популярные плагины для создания тикет-системы в WordPress

1. Awesome Support — многофункциональный и бесплатный

Awesome Support — один из лучших бесплатных плагинов для организации поддержки на WordPress. Он позволяет создавать тикеты, назначать их исполнителям, обмениваться комментариями, прикреплять файлы, а также поддерживает расширения для интеграции с WooCommerce, Slack и другими сервисами.

Преимущества:

  • Простой интерфейс для пользователей и администраторов
  • Поддержка кастомных полей в формах тикетов
  • Возможность создавать неограниченное количество тикетов
  • Множество расширений (платных) для интеграций и улучшений

Установка и настройка:

Для установки зайдите в админку WordPress → Плагины → Добавить новый и введите «Awesome Support» в поиске. После активации перейдите в меню «Awesome Support» и настройте статусы тикетов, роли пользователей и уведомления.

2. WP Support Plus Responsive Ticket System

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

Он отлично подойдёт для небольших проектов, где нужна простая и удобная система поддержки без лишних наворотов.

Создаем простую тикет-систему с помощью кастомного кода

Если вы хотите сделать уникальное решение или не хотите использовать сторонние плагины, можно реализовать базовую тикет-систему самостоятельно. Ниже приведён пример, как создать кастомный тип записи «wptickets_ticket» для хранения тикетов и простой шорткод для отображения формы и списка тикетов пользователя.

Регистрация кастомного типа записи тикетов

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

    $args = array(
        'labels'             => $labels,
        'public'             => false,
        'show_ui'            => true,
        'capability_type'    => 'post',
        'hierarchical'       => false,
        'supports'           => array('title', 'editor', 'author'),
        'menu_position'      => 20,
        'menu_icon'          => 'dashicons-sos',
        'exclude_from_search'=> true,
        'publicly_queryable' => false,
        'has_archive'        => false,
    );

    register_post_type('wptickets_ticket', $args);
}
add_action('init', 'wptickets_register_ticket_post_type');

Создание шорткода для отображения формы создания тикета и списка тикетов пользователя

Добавим шорткод [wptickets_ticket_system], который будет выводить форму для создания тикета и список уже созданных тикетов текущего пользователя.

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

    $output = '';

    // Обработка отправки формы
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['wptickets_ticket_nonce']) && wp_verify_nonce($_POST['wptickets_ticket_nonce'], 'wptickets_submit_ticket')) {
        $title = sanitize_text_field($_POST['ticket_title']);
        $content = sanitize_textarea_field($_POST['ticket_content']);

        if ($title && $content) {
            $new_ticket = array(
                'post_title' => $title,
                'post_content' => $content,
                'post_status' => 'publish',
                'post_type' => 'wptickets_ticket',
                'post_author' => get_current_user_id(),
            );
            $post_id = wp_insert_post($new_ticket);
            if ($post_id) {
                $output .= '<p>Тикет успешно создан.</p>';
            } else {
                $output .= '<p>Ошибка при создании тикета.</p>';
            }
        } else {
            $output .= '<p>Пожалуйста, заполните все поля формы.</p>';
        }
    }

    // Форма создания тикета
    $output .= '<form method="post">';
    $output .= '<label>Заголовок тикета:<input type="text" name="ticket_title" required /></label><br />';
    $output .= '<label>Описание проблемы:<textarea name="ticket_content" required></textarea></label><br />';
    $output .= wp_nonce_field('wptickets_submit_ticket', 'wptickets_ticket_nonce', true, false);
    $output .= '<input type="submit" value="Создать тикет" />';
    $output .= '</form>';

    // Вывод списка тикетов пользователя
    $tickets = get_posts(array(
        'post_type' => 'wptickets_ticket',
        'author' => get_current_user_id(),
        'posts_per_page' => -1,
        'post_status' => 'publish',
    ));

    if ($tickets) {
        $output .= '<h3>Ваши тикеты:</h3><ul>';
        foreach ($tickets as $ticket) {
            $output .= '<li><strong>' . esc_html($ticket->post_title) . '</strong> - ' . esc_html(wp_trim_words($ticket->post_content, 15)) . '</li>';
        }
        $output .= '</ul>';
    } else {
        $output .= '<p>У вас пока нет тикетов.</p>';
    }

    return $output;
}
add_shortcode('wptickets_ticket_system', 'wptickets_ticket_form_shortcode');

Расширение функционала: уведомления и статусы тикетов

В реальных системах поддержки важно информировать пользователя и администратора о статусах тикета и новых сообщениях. Для этого можно добавить метаполя для хранения статуса (например, «Открыт», «В работе», «Закрыт») и отправлять email-уведомления при создании или обновлении тикета.

Добавим метаполе статуса и простой пример отправки email администраторам при создании тикета:

function wptickets_set_default_status($post_id, $post, $update) {
    if ($post->post_type !== 'wptickets_ticket' || $update) {
        return;
    }
    add_post_meta($post_id, '_wptickets_status', 'Открыт', true);

    // Отправка email администраторам
    $admins = get_users(array('role' => 'administrator'));
    $subject = 'Новый тикет создан';
    $message = 'Пользователь ' . get_the_author_meta('display_name', $post->post_author) . ' создал новый тикет: "' . $post->post_title . '". Просмотреть: ' . get_edit_post_link($post_id);
    foreach ($admins as $admin) {
        wp_mail($admin->user_email, $subject, $message);
    }
}
add_action('wp_insert_post', 'wptickets_set_default_status', 10, 3);

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

Рекомендации по безопасности и удобству использования

При создании тикет-системы важно защитить сайт от спама и неавторизованного доступа. Несколько советов:

  • Используйте wp_nonce_field и проверяйте nonce при обработке форм.
  • Разрешайте создавать тикеты только авторизованным пользователям, либо добавьте капчу (Google reCAPTCHA).
  • Ограничьте просмотр тикетов только их авторам и администраторам.
  • Регулярно обновляйте плагины и WordPress для безопасности.

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

Как добавить Privacy Policy и Terms в форму тикета WPtickets для соответствия требованиям
03.05.2026
Как создать автоматический отчет по тикетам в WordPress с WPtickets и WPRemark
04.04.2026
Как установить права доступа к тикетам WPtickets через capabilities в WordPress
31.05.2026
Как создать кастомный фильтр для тикетов в WPtickets
11.02.2026
Оптимизация производительности WordPress при работе с большими базами данных
28.11.2025