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

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

Почему важно удалять старые просмотры в WordPress

Многие плагины и кастомные решения сохраняют статистику просмотров в метаданных записей или отдельной таблице. С течением времени эти данные накапливаются и могут занимать существенное место в базе данных, что приводит к замедлению запросов и увеличению времени загрузки сайта. Регулярное удаление устаревших просмотров помогает:

  • Уменьшить размер базы данных.
  • Повысить скорость отклика сайта.
  • Избежать проблем с перегрузкой хранилища.

Где хранятся просмотры в WordPress и как их определить

Чаще всего просмотры сохраняются в postmeta с ключами типа post_views_count или похожими. Иногда плагины создают собственные таблицы, например wp_post_views. Чтобы понять, где хранятся данные просмотров, можно:

  • Изучить документацию используемого плагина.
  • Использовать SQL-запросы для поиска ключей в таблице wp_postmeta с помощью:
SELECT DISTINCT meta_key FROM wp_postmeta WHERE meta_key LIKE '%view%';

Если плагин создает отдельную таблицу, это обычно видно в списке таблиц базы данных.

Как настроить автоматическое удаление просмотров по сроку хранения

Для примера рассмотрим случай, когда просмотры хранятся в метаполях с ключом post_views_count, и нам нужно удалять данные старше 30 дней. Для этого нужно хранить не только количество просмотров, но и дату последнего обновления — если плагин этого не делает, можно реализовать свое решение.

Пример: хранение даты и количества просмотров

Создадим два метаполя: wpbit_post_views_count и wpbit_post_views_date, где во втором будет дата последнего просмотра.

Функция для обновления просмотров в теме или плагине

function wpbit_update_post_views($post_id) {
    $count = (int) get_post_meta($post_id, 'wpbit_post_views_count', true);
    $count++;
    update_post_meta($post_id, 'wpbit_post_views_count', $count);
    update_post_meta($post_id, 'wpbit_post_views_date', current_time('mysql'));
}

Вызывайте эту функцию при загрузке поста, например, в single.php или через хук wp.

Функция для очистки старых просмотров

Создадим функцию, которая будет запускаться по Cron и удалять метаданные просмотров, если дата старше 30 дней:

function wpbit_cleanup_old_post_views() {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));

    $meta_keys = ['wpbit_post_views_count', 'wpbit_post_views_date'];

    // Получаем все посты с датой просмотров старше 30 дней
    $post_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT post_id FROM {$wpdb->postmeta} pm WHERE pm.meta_key = %s AND pm.meta_value < %s",
        'wpbit_post_views_date', $date_threshold
    ));

    if (!empty($post_ids)) {
        foreach ($post_ids as $post_id) {
            foreach ($meta_keys as $meta_key) {
                delete_post_meta($post_id, $meta_key);
            }
        }
    }
}

Добавление задачи Cron для автоматизации

Чтобы функция запускалась автоматически, добавим расписание и событие в файл functions.php или в плагин:

if (!wp_next_scheduled('wpbit_daily_cleanup_post_views')) {
    wp_schedule_event(time(), 'daily', 'wpbit_daily_cleanup_post_views');
}

add_action('wpbit_daily_cleanup_post_views', 'wpbit_cleanup_old_post_views');

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

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

Если вы используете популярные плагины для подсчета просмотров, например WP-PostViews или Count Per Day, то можно воспользоваться плагинами для оптимизации и очистки базы данных:

  • Clearfy Pro — позволяет управлять метаданными и очищать их по расписанию.
  • WP-Optimize — бесплатный плагин для очистки базы данных от устаревших данных.

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

Контроль и проверка эффективности очистки просмотров

После настройки автоматической очистки важно контролировать работу кода и корректность удаления данных:

  • Проверьте, что просмотры действительно удаляются через 30 дней, взглянув в базу данных.
  • Отслеживайте скорость работы сайта и размер таблиц wp_postmeta.
  • Если используется кэширование, убедитесь, что кэш обновляется после очистки.

Логирование работы очистки

Для отладки можно добавить логирование в функцию очистки:

function wpbit_cleanup_old_post_views() {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-30 days'));

    $meta_keys = ['wpbit_post_views_count', 'wpbit_post_views_date'];

    $post_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT post_id FROM {$wpdb->postmeta} pm WHERE pm.meta_key = %s AND pm.meta_value < %s",
        'wpbit_post_views_date', $date_threshold
    ));

    if (!empty($post_ids)) {
        foreach ($post_ids as $post_id) {
            foreach ($meta_keys as $meta_key) {
                delete_post_meta($post_id, $meta_key);
            }
        }
        error_log('WPBit: Deleted views for posts: ' . implode(',', $post_ids));
    } else {
        error_log('WPBit: No old post views to delete');
    }
}

Заключение по теме автоматического удаления просмотров

Автоматическое удаление старых просмотров позволяет поддерживать базу данных WordPress в порядке и улучшать производительность сайта. При правильной реализации можно избежать роста таблиц и ускорить загрузку страниц. Комбинация пользовательских функций с событиями Cron и плагинами для оптимизации — лучший путь к стабильной работе.

Если вы используете плагины из каталога WPShop, обратите внимание на возможности автоматизации очистки данных, которые они предлагают — это позволит ещё проще решать задачу.

Как избежать проблем с отключением WP-Cron в WordPress
20.04.2026
Автоматизация обновления подписок в WordPress через AJAX
21.01.2026
Как изменить структуру URL в WordPress без плагинов
24.01.2026
Оптимизация базы данных WordPress: используем плагины и пишем свой код
21.11.2025
Как добавить автоматическое сохранение в формы WordPress
04.01.2026