Как добавить обратную связь с привязкой к пользователю в WordPress

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

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

Стандартные формы обратной связи не сохраняют информацию о том, кто именно отправил сообщение, если пользователь не указывает свои данные явно. Это затрудняет последующую обработку обращений, особенно когда пользователь зарегистрирован на сайте и авторизован. Привязка сообщений к ID пользователя позволяет:

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

Реализовать такую систему можно с помощью кастомного плагина или в рамках дочерней темы. Рассмотрим пример на базе кастомного шорткода с AJAX-обработкой.

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

Для начала создадим шорткод [hueman_feedback_form], который выведет форму с полями и кнопкой отправки. Если пользователь авторизован, поля с именем и email автоматически заполнятся.

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

    $current_user = wp_get_current_user();

    ob_start();
    ?>
    <form id="hueman-feedback-form" method="post">
        <label for="hueman-message">Ваше сообщение:</label><br>
        <textarea id="hueman-message" name="message" required rows="5" cols="50"></textarea><br>
        <input type="hidden" name="user_id" value="<?php echo esc_attr($current_user->ID); ?>">
        <button type="submit">Отправить</button>
    </form>
    <div id="hueman-feedback-result"></div>
    <script>
    document.getElementById('hueman-feedback-form').addEventListener('submit', function(e) {
        e.preventDefault();
        var form = e.target;
        var data = new FormData(form);
        data.append('action', 'hueman_submit_feedback');

        fetch('<?php echo admin_url('admin-ajax.php'); ?>', {
            method: 'POST',
            credentials: 'same-origin',
            body: data
        })
        .then(response => response.json())
        .then(result => {
            document.getElementById('hueman-feedback-result').textContent = result.data.message;
            if(result.success){
                form.reset();
            }
        })
        .catch(() => {
            document.getElementById('hueman-feedback-result').textContent = 'Ошибка при отправке сообщения.';
        });
    });
    </script>
    <?php

    return ob_get_clean();
}
add_shortcode('hueman_feedback_form', 'hueman_feedback_form_shortcode');

В этом коде мы создаём форму с текстовым полем для сообщения. ID текущего пользователя передаётся скрытым полем. Отправка реализована через JavaScript fetch к admin-ajax.php.

Обработка AJAX-запроса и сохранение сообщения

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

function hueman_handle_feedback() {
    // Проверяем, что пользователь авторизован
    if (!is_user_logged_in()) {
        wp_send_json_error(['message' => 'Требуется авторизация']);
    }

    $user_id = get_current_user_id();
    $message = isset($_POST['message']) ? sanitize_textarea_field($_POST['message']) : '';

    if (empty($message)) {
        wp_send_json_error(['message' => 'Сообщение не может быть пустым']);
    }

    // Создаем кастомный пост для хранения обратной связи
    $feedback_post = wp_insert_post([
        'post_type' => 'hueman_feedback',
        'post_title' => 'Обращение пользователя #' . $user_id,
        'post_content' => $message,
        'post_status' => 'private',
        'post_author' => $user_id
    ]);

    if (is_wp_error($feedback_post)) {
        wp_send_json_error(['message' => 'Ошибка сохранения сообщения']);
    }

    wp_send_json_success(['message' => 'Ваше сообщение успешно отправлено']);
}
add_action('wp_ajax_hueman_submit_feedback', 'hueman_handle_feedback');

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

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

Добавим регистрацию типа записи в functions.php или плагин:

function hueman_register_feedback_post_type() {
    register_post_type('hueman_feedback', [
        'labels' => [
            'name' => 'Обратная связь',
            'singular_name' => 'Сообщение',
            'menu_name' => 'Обратная связь'
        ],
        'public' => false,
        'show_ui' => true,
        'supports' => ['title', 'editor', 'author'],
        'capability_type' => 'post',
        'capabilities' => [
            'create_posts' => false,
        ],
        'map_meta_cap' => true,
        'menu_position' => 25,
        'menu_icon' => 'dashicons-email-alt',
    ]);
}
add_action('init', 'hueman_register_feedback_post_type');

Теперь в админке появится раздел «Обратная связь», где можно просматривать обращения пользователей.

Дополнительные улучшения и интеграция с плагинами

Можно расширить функционал:

  • Добавить уведомления на email администратора или ответственного сотрудника при новом сообщении.
  • Использовать плагин Expert Review для расширения системы отзывов и обратной связи.
  • Добавить CAPTCHA или интеграцию с сервисами антиспама.
  • Реализовать в личном кабинете пользователя страницу с историей его обращений.

Для отправки email можно добавить в функцию hueman_handle_feedback следующий код:

$admin_email = get_option('admin_email');
wp_mail($admin_email, 'Новое сообщение от пользователя #' . $user_id, $message);

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать динамические таблицы в WordPress с помощью шорткодов
20.11.2025
Как создать адаптивный блок в WordPress с помощью кастомного кода и плагинов
03.12.2025
Как исправить дублирование артикулов (SKU) в WooCommerce: диагностика и исправление
27.04.2026
Как использовать хук pre_get_posts для решения проблем с фильтром в WooCommerce
03.05.2026
Как создать автозаполняемые поля в формах WordPress с использованием AJAX
07.04.2026
×
WordPress
прокачай свой сайт!

-20% на премиум темы и плагины

Сделай апгрейд сайта ⋙