Автоматическое удаление старых голосов в опросах 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 без потери данных
13.07.2026
Как запретить удаление голосов в опросах WordPress
23.04.2026
Интеграция опросов WordPress в WooCommerce для сбора отзывов: практическое руководство
06.05.2026
Как создать выставку результатов опроса в WordPress с фильтрацией и сортировкой
30.03.2026
Как добавить пользовательские поля в опросы WordPress
27.11.2025