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

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

Почему стоит создавать автоматические отчеты по посетителям WordPress

Стандартные плагины аналитики отлично подходят для сбора данных, но часто предоставляют слишком много информации или требуют входа в сторонние сервисы. Автоматические отчеты, которые вы создаете сами, позволяют:

  • Получать нужную статистику в удобном формате.
  • Настроить сбор именно тех данных, которые важны для вашего проекта.
  • Экономить время, автоматизируя рутину.
  • Избежать зависимости от сторонних сервисов.

Для этого удобно использовать WP-Cron, который позволяет запускать задачи по расписанию прямо на сервере WordPress.

Основные задачи для автоматического отчета по посетителям

Перед тем как начать разработку, определим, какие данные мы будем собирать:

  • Количество уникальных посетителей за период.
  • Популярные страницы (по просмотрам).
  • Источники трафика (рефереры).
  • Время, проведенное на сайте.
  • Ошибки 404, если есть.

В зависимости от потребностей вы можете расширять или сужать список.

Использование готовых плагинов для автоматических отчетов по посетителям

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

  • Clearfy Pro — многофункциональный плагин с возможностью сбора и автоматической отправки отчетов по посещаемости.
  • WPRemark — инструмент для создания отчетов с кастомными метриками и отправкой на почту.

Но если вам нужна более глубокая кастомизация, стоит рассмотреть создание своего решения.

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

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

1. Создаем таблицу для хранения статистики

В файле плагина используем активацию для создания таблицы в базе данных:

register_activation_hook(__FILE__, 'wpskill_create_visitors_table');
function wpskill_create_visitors_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpskill_visitors';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id BIGINT(20) NOT NULL AUTO_INCREMENT,
      visit_date DATE NOT NULL,
      ip_address VARCHAR(45) NOT NULL,
      page_url TEXT NOT NULL,
      PRIMARY KEY (id)
    ) $charset_collate;";

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

2. Записываем посещения

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

add_action('wp', 'wpskill_record_visitor');
function wpskill_record_visitor() {
    if (is_admin()) return; // не записываем админские посещения

    global $wpdb;
    $table_name = $wpdb->prefix . 'wpskill_visitors';
    $ip = $_SERVER['REMOTE_ADDR'];
    $page = esc_url_raw($_SERVER['REQUEST_URI']);
    $date = current_time('Y-m-d');

    // Проверяем, не записан ли уже этот IP сегодня на эту страницу
    $exists = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM $table_name WHERE ip_address = %s AND visit_date = %s AND page_url = %s",
        $ip, $date, $page
    ));

    if (!$exists) {
        $wpdb->insert($table_name, [
            'visit_date' => $date,
            'ip_address' => $ip,
            'page_url' => $page
        ]);
    }
}

3. Создаем WP-Cron задание для еженедельной отправки отчета

Добавляем расписание и функцию отправки:

add_action('wpskill_weekly_report_event', 'wpskill_send_weekly_report');

function wpskill_send_weekly_report() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpskill_visitors';

    $week_ago = date('Y-m-d', strtotime('-7 days'));

    $total_visits = $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(DISTINCT ip_address) FROM $table_name WHERE visit_date >= %s",
        $week_ago
    ));

    $popular_pages = $wpdb->get_results($wpdb->prepare(
        "SELECT page_url, COUNT(*) as cnt FROM $table_name WHERE visit_date >= %s GROUP BY page_url ORDER BY cnt DESC LIMIT 5",
        $week_ago
    ), ARRAY_A);

    $message = "Отчет за последнюю неделю:\n";
    $message .= "Уникальных посетителей: $total_visits\n";
    $message .= "Популярные страницы:\n";
    foreach ($popular_pages as $page) {
        $message .= $page['page_url'] . ' - ' . $page['cnt'] . " посещений\n";
    }

    wp_mail(get_option('admin_email'), 'Еженедельный отчет по посетителям', $message);
}

// Регистрируем событие при активации плагина
register_activation_hook(__FILE__, 'wpskill_schedule_weekly_report');
function wpskill_schedule_weekly_report() {
    if (!wp_next_scheduled('wpskill_weekly_report_event')) {
        wp_schedule_event(time(), 'weekly', 'wpskill_weekly_report_event');
    }
}

// Удаляем расписание при деактивации
register_deactivation_hook(__FILE__, 'wpskill_clear_scheduled_report');
function wpskill_clear_scheduled_report() {
    $timestamp = wp_next_scheduled('wpskill_weekly_report_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpskill_weekly_report_event');
    }
}

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

Добавление источников трафика

Чтобы добавить информацию об источниках трафика, можно расширить таблицу и сохранять HTTP_REFERER:

$sql = "CREATE TABLE $table_name (
  id BIGINT(20) NOT NULL AUTO_INCREMENT,
  visit_date DATE NOT NULL,
  ip_address VARCHAR(45) NOT NULL,
  page_url TEXT NOT NULL,
  referer TEXT NULL,
  PRIMARY KEY (id)
) $charset_collate;";

И в функции записи добавить:

$referer = isset($_SERVER['HTTP_REFERER']) ? esc_url_raw($_SERVER['HTTP_REFERER']) : '';

// Вставка с referer
$wpdb->insert($table_name, [
    'visit_date' => $date,
    'ip_address' => $ip,
    'page_url' => $page,
    'referer' => $referer
]);

Использование плагина WPRemark для отчетов

Если хотите более продвинутые отчеты с графиками и удобным интерфейсом, рекомендуем посмотреть WPRemark. Он позволяет создавать кастомные метрики, планировать отправку по расписанию и интегрируется с вашей статистикой.

Оптимизация и безопасность

При работе с IP и статистикой важно учитывать:

  • Обрабатывать данные с учётом GDPR, если сайт работает с пользователями из ЕС.
  • Очищать таблицу от старых данных, чтобы она не разрасталась бесконтрольно.
  • Использовать транзиенты для кэширования тяжелых запросов.
  • Проверять, чтобы wp_mail отправлял письма корректно – можно использовать SMTP-плагины.

Пример очистки старых данных раз в месяц через WP-Cron:

add_action('wpskill_monthly_cleanup_event', 'wpskill_cleanup_old_visitors');
function wpskill_cleanup_old_visitors() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpskill_visitors';
    $cutoff_date = date('Y-m-d', strtotime('-90 days'));
    $wpdb->query($wpdb->prepare("DELETE FROM $table_name WHERE visit_date < %s", $cutoff_date));
}

register_activation_hook(__FILE__, 'wpskill_schedule_monthly_cleanup');
function wpskill_schedule_monthly_cleanup() {
    if (!wp_next_scheduled('wpskill_monthly_cleanup_event')) {
        wp_schedule_event(time(), 'monthly', 'wpskill_monthly_cleanup_event');
    }
}

register_deactivation_hook(__FILE__, 'wpskill_clear_scheduled_cleanup');
function wpskill_clear_scheduled_cleanup() {
    $timestamp = wp_next_scheduled('wpskill_monthly_cleanup_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpskill_monthly_cleanup_event');
    }
}
Автоматическое удаление старых комментариев в WordPress
10.03.2026
Как изменить разметку WooCommerce без переопределения шаблонов
04.12.2025
Как отладить проблемы с кешированием в WordPress
28.11.2025
Как автоматизировать управление ролями и правами в WordPress с примерами кода
17.03.2026
Как создать обновляемые виджеты в WordPress с примерами кода
11.11.2025