Как создать отслеживание событий в WordPress с помощью REST API

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

Зачем создавать собственное отслеживание событий в WordPress

Использование сторонних сервисов аналитики, таких как Google Analytics, отлично подходит для большинства случаев. Но бывают задачи, когда:

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

В таких случаях создание собственного REST API для сохранения и обработки событий — правильное решение.

Создаем REST API эндпоинт для приема событий

Для начала создадим REST API маршрут, который будет принимать данные о событиях от фронтенда.

add_action('rest_api_init', function () {
    register_rest_route('wpbest/v1', '/track-event', array(
        'methods' => 'POST',
        'callback' => 'wpbest_track_event_handler',
        'permission_callback' => '__return_true',
    ));
});

function wpbest_track_event_handler(WP_REST_Request $request) {
    $params = $request->get_json_params();
    if (empty($params['event_name'])) {
        return new WP_REST_Response(array('error' => 'Event name is required'), 400);
    }

    global $wpdb;
    $table = $wpdb->prefix . 'wpbest_events';

    $data = array(
        'event_name' => sanitize_text_field($params['event_name']),
        'event_data' => maybe_serialize($params['event_data'] ?? []),
        'user_ip' => $_SERVER['REMOTE_ADDR'],
        'created_at' => current_time('mysql'),
    );

    $format = array('%s', '%s', '%s', '%s');
    $wpdb->insert($table, $data, $format);

    return new WP_REST_Response(array('success' => true), 200);
}

Этот код регистрирует маршрут /wp-json/wpbest/v1/track-event, который принимает POST-запрос с JSON-параметрами. Мы ожидаем обязательное поле event_name и опциональные данные события в event_data. Все данные сохраняются в отдельную таблицу базы.

Создание таблицы для хранения событий

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

function wpbest_create_events_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpbest_events';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id BIGINT(20) NOT NULL AUTO_INCREMENT,
        event_name VARCHAR(100) NOT NULL,
        event_data LONGTEXT NULL,
        user_ip VARCHAR(45) NOT NULL,
        created_at DATETIME NOT NULL,
        PRIMARY KEY  (id),
        KEY event_name_idx (event_name),
        KEY created_at_idx (created_at)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wpbest_create_events_table');

Этот код создаст таблицу wpbest_events с необходимыми полями для хранения названия события, данных, IP пользователя и времени создания.

Отправка событий с фронтенда

Теперь настроим JavaScript, который будет отправлять данные событий на наш API. В WordPress лучше использовать enqueue и wp_localize_script для передачи URL REST API.

function wpbest_enqueue_scripts() {
    wp_enqueue_script('wpbest-events', plugin_dir_url(__FILE__) . 'js/wpbest-events.js', array('jquery'), '1.0', true);
    wp_localize_script('wpbest-events', 'wpbestData', array(
        'restUrl' => esc_url_raw(rest_url('wpbest/v1/track-event')),
        'nonce' => wp_create_nonce('wp_rest'),
    ));
}
add_action('wp_enqueue_scripts', 'wpbest_enqueue_scripts');

Файл js/wpbest-events.js может содержать следующий код для отправки события:

function wpbestSendEvent(eventName, eventData = {}) {
    fetch(wpbestData.restUrl, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'X-WP-Nonce': wpbestData.nonce
        },
        body: JSON.stringify({
            event_name: eventName,
            event_data: eventData
        })
    })
    .then(response => response.json())
    .then(data => console.log('Event tracked:', data))
    .catch(err => console.error('Tracking error:', err));
}

// Пример вызова отслеживания клика по кнопке
jQuery(document).ready(function($) {
    $('#my-button').on('click', function() {
        wpbestSendEvent('button_click', {button_id: 'my-button'});
    });
});

Обработка и анализ собранных событий

Данные теперь хранятся локально и могут быть использованы для анализа. Можно вывести статистику в админке WordPress, используя WP_List_Table или REST API для отображения на фронтенде.

Для примера создадим простую страницу в админке с подсчетом количества событий по типам:

function wpbest_events_admin_page() {
    global $wpdb;
    $table = $wpdb->prefix . 'wpbest_events';

    $results = $wpdb->get_results("SELECT event_name, COUNT(*) as count FROM $table GROUP BY event_name ORDER BY count DESC");

    echo '<div class="wrap"><h1>Статистика событий</h1><table class="widefat fixed"><thead><tr><th>Событие</th><th>Количество</th></tr></thead><tbody>';

    foreach ($results as $row) {
        echo '<tr><td>' . esc_html($row->event_name) . '</td><td>' . esc_html($row->count) . '</td></tr>';
    }

    echo '</tbody></table></div>';
}

function wpbest_add_admin_menu() {
    add_menu_page('Отслеживание событий', 'Отслеживание событий', 'manage_options', 'wpbest-events', 'wpbest_events_admin_page');
}
add_action('admin_menu', 'wpbest_add_admin_menu');

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

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

Если хочется избежать ручного создания решения, можно обратить внимание на плагины, которые расширяют REST API и упрощают сбор данных. Например, Clearfy Pro помогает оптимизировать работу сайта и управлять API запросами.

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

Безопасность и производительность

При работе с REST API важно соблюдать меры безопасности:

  • Проверяйте и фильтруйте входящие данные.
  • Используйте nonce для проверки запросов с фронтенда.
  • Ограничивайте доступ к эндпоинтам, если это необходимо.
  • Для больших объемов данных подумайте об асинхронной обработке и очистке старых записей.

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

Итоги

Создание собственного REST API для отслеживания событий в WordPress — мощный инструмент для гибкой аналитики и кастомных решений. Используя приведенные примеры, вы сможете адаптировать код под свои задачи, интегрировать сбор данных с фронтендом и создавать удобные отчеты в админке.

Для подробного изучения REST API в WordPress советую посмотреть официальную документацию и экспериментировать с собственными маршрутами и методами.

Как использовать hooks в WordPress для расширения функциональности
14.11.2025
Как создать отслеживание пользовательских действий в WordPress с помощью AJAX и REST API
10.01.2026
Как сделать удалённую загрузку файлов в WordPress через AJAX с примерами
04.01.2026
Как использовать WPRemark для отслеживания и анализа комментариев в WordPress
25.12.2025
Удаление загруженных медиа файлов в WordPress по дате
07.01.2026