Автоматическое удаление старых голосов в опросах WordPress: пошаговое руководство

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

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

Пошаговое решение: как настроить автоматическое удаление голосов

1. Определение критерия устаревших голосов

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

2. Создание кастомной функции удаления

Пример кода для удаления голосов старше 180 дней из таблицы wp_poll_votes. Предполагается, что база данных содержит дату голосования в поле vote_date формата DATETIME:

function wppolls_delete_old_votes() {
    global $wpdb;
    $days = 180; // порог в днях
    $table = $wpdb->prefix . 'poll_votes';
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $deleted = $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM {$table} WHERE vote_date < %s",
            $date_threshold
        )
    );

    if ($deleted !== false) {
        error_log("[WPPolls] Deleted {$deleted} old votes older than {$days} days.");
    }
}

3. Настройка Cron-задачи для регулярного запуска удаления

Добавьте в functions.php регистрацию собственного Cron и его запуск:

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

add_action('wppolls_delete_old_votes_cron', 'wppolls_delete_old_votes');

Этот код запустит очистку голосов раз в сутки.

Проверка результата после внедрения

  • Просмотрите логи сайта (например, error_log), чтобы увидеть записи о количестве удалённых голосов.
  • Проверьте размер таблицы wp_poll_votes в базе данных до и после внедрения.
  • Убедитесь, что свежие голоса не удаляются — сделайте тестовое голосование и проверьте, что оно сохранено.

Частые ошибки и как исправить

  • Неправильное имя таблицы: В разных плагинах и версиях может использоваться своя таблица для голосов. Проверьте точное имя в базе данных или используйте $wpdb->prefix для корректной подстановки.
  • Отсутствие поля с датой голосования: Если плагин не хранит дату голосования, автоматизировать удаление по времени нельзя без доработок.
  • Дублирование Cron-задач: Если не проверить наличие задачи перед регистрацией, Cron может запуститься несколько раз в день. Используйте wp_next_scheduled.
  • Проблемы с правами базы данных: Убедитесь, что пользователь БД имеет права на удаление записей.

Практические советы по безопасности и производительности

  • Перед внедрением сделайте резервную копию базы данных.
  • Запускайте удаление в ночное время, чтобы снизить нагрузку на сайт.
  • Добавьте логирование с ограничением объёма, чтобы не переполнять логи.
  • Если таблица очень большая, рассмотрите удаление по частям с помощью LIMIT и повторного запуска задачи.
  • Для плагинов с нестандартными структурами данных изучите их API или обратитесь к документации перед удалением.

Сравнение подходов к удалению старых голосов

МетодПлюсыМинусы
Ручное удаление через phpMyAdmin Быстро, без кода Риск ошибок, не автоматизировано
Кастомный Cron с SQL-запросом Автоматизация, гибкость Требует навыков, риск неправильного удаления
Использование плагинов оптимизации Упрощает работу, дополнительные функции безопасности Может не поддерживать специфические таблицы опросов
Как создать опрос из формы контакта WordPress
23.12.2025
Создание опроса с автоподсчетом и подробной аналитикой в WordPress
27.02.2026
Отзывы с выбором оценки в WordPress: пошаговое руководство
13.12.2025
Как создать спам-фильтр для опросов WordPress: защита от ботов и повторных голосов
03.04.2026
Как создать опросы с авторизацией пользователей в WordPress
17.03.2026