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

Диагностика проблемы накопления голосов

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

Чтобы проверить, есть ли эта проблема, зайдите в базу данных (обычно через phpMyAdmin) и посмотрите таблицы с голосами, например, wp_poll_votes или аналогичные в зависимости от плагина. Обратите внимание на количество записей и дату последних голосов.

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

1. Определение критериев удаления

Решите, за какой период вы хотите хранить голоса. Например, удалять голоса старше 6 месяцев.

2. Создание PHP-функции для удаления старых голосов

Ниже пример кода для удаления голосов старше 180 дней из таблицы wp_poll_votes. Подстройте название таблицы под используемый плагин.

function delete_old_poll_votes() {
    global $wpdb;
    $table = $wpdb->prefix . 'poll_votes';
    $days = 180;
    $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 ( false === $deleted ) {
        error_log('Ошибка при удалении старых голосов опросов.');
    } else {
        error_log("Удалено голосов опросов старше $days дней: $deleted");
    }
}

3. Автоматизация запуска функции с помощью WP-Cron

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

function schedule_delete_old_poll_votes() {
    if ( ! wp_next_scheduled( 'delete_old_poll_votes_hook' ) ) {
        wp_schedule_event( time(), 'weekly', 'delete_old_poll_votes_hook' );
    }
}
add_action( 'wp', 'schedule_delete_old_poll_votes' );
add_action( 'delete_old_poll_votes_hook', 'delete_old_poll_votes' );

4. Добавление кода в functions.php или отдельный плагин

Рекомендуется добавить этот код в файл functions.php вашей дочерней темы или создать отдельный пустой плагин для удобства поддержки.

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

  • Подождите, пока сработает cron-задача (или вызовите функцию вручную через WP-CLI: wp eval 'delete_old_poll_votes();').
  • Проверьте в базе данных уменьшение количества записей в таблице голосов.
  • Посмотрите логи ошибок WordPress для сообщений о выполнении или проблемах.
  • Проверьте работу опросов на сайте: корректно ли отображаются результаты после удаления старых голосов.

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

  • Неправильное имя таблицы. Убедитесь, что имя таблицы wp_poll_votes соответствует используемому плагину. Ошибка в названии приведет к сбою.
  • Отсутствие поля с датой голосования. Не все плагины хранят дату голосования. В этом случае нужно доработать плагин или использовать другие критерии для удаления.
  • WP-Cron не запускается. Если планировщик не работает, проверьте, вызывается ли cron на сайте, или настройте системный cron для вызова wp-cron.php.
  • Удаление нужных голосов. Проверьте условие даты, чтобы не удалить актуальные данные.

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

  • Резервное копирование базы данных. Перед внедрением автоматического удаления обязательно создайте резервную копию.
  • Оптимизация запросов. Используйте индексы по полю даты в таблице голосов для быстрого удаления.
  • Разбиение удаления на части. Если голосов очень много, удаляйте пачками (например, по 1000 записей за раз), чтобы не перегружать базу.
  • Логирование действий. Включите логирование в error_log для мониторинга процесса удаления.

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

МетодКодПлюсыМинусы
Ручное удаление через phpMyAdminSQL-запрос DELETEПростое, быстроеТребует постоянного ручного контроля, риск ошибок
Автоматический WP-Cron с кастомным кодомPHP + WP-CronАвтономно, без вмешательства, гибкоЗависит от корректной работы cron, требует знаний
Плагины очистки базыUI, настройкиПростота использованияМогут не поддерживать специфичные таблицы голосов
Как создать оценку настроения в опросе WordPress с примерами и кодом
07.02.2026
Как создать выставку результатов опроса в WordPress с фильтрацией и сортировкой
30.03.2026
Как создать обратный опрос в WordPress с помощью AJAX
23.03.2026
Как удалить голоса и отзывы из опросов WordPress за один шаг
03.05.2026
Как использовать WPRemark для анализа ответов в опросах WordPress
24.01.2026