Ведение сайта на WordPress часто сопровождается накоплением большого количества комментариев. Особенно актуальна проблема с оставленными комментариями, которые давно устарели или неактивны. Их хранение может влиять на производительность сайта и усложнять модерацию. В этой статье разберем, как автоматизировать удаление старых комментариев в WordPress, используя как готовые плагины, так и собственные решения на PHP.
Почему важно удалять старые комментарии в WordPress
С течением времени посты на сайте получают комментарии, которые теряют актуальность. Старые комментарии могут быть:
- Спамом или низкокачественными сообщениями.
- Неактивными – без ответов и взаимодействия.
- Загружать базу данных и замедлять работу сайта.
Регулярное удаление таких комментариев помогает поддерживать чистоту базы, улучшать скорость отклика и облегчать администрирование.
Использование плагинов для автоматического удаления комментариев
Самый простой способ — использовать плагины, которые позволяют настроить автоматическую очистку комментариев старше определённого срока.
Плагин Delete Old Comments
Плагин Delete Old Comments позволяет задать период, по истечении которого комментарии будут удаляться автоматически. Настройки достаточно просты и понятны.
- Выбор периода (например, 180 дней).
- Фильтрация по статусу комментария (одобренные, ожидающие модерации, спам).
- Возможность запуска очистки вручную или по расписанию.
Плагин WP Bulk Delete
Этот мощный инструмент позволяет массово удалять не только комментарии, но и посты, пользователей и др. Для комментариев доступна фильтрация по дате, статусу, ключевым словам и другим параметрам.
Плагин можно найти на wpshop.ru с дополнительными возможностями Pro версии.
Кодовое решение: автоматическое удаление комментариев старше N дней
Если вы предпочитаете минимизировать количество плагинов, можно добавить кастомный код в файл functions.php вашей темы или создать свой плагин.
Пример функции для удаления старых комментариев
function wprus_delete_old_comments() {
global $wpdb;
$days = 180; // Количество дней для хранения комментариев
$date = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));
// Получаем ID комментариев старше $days дней
$comment_ids = $wpdb->get_col($wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} WHERE comment_date < %s",
$date
));
if (!empty($comment_ids)) {
foreach ($comment_ids as $comment_id) {
wp_delete_comment($comment_id, true); // true - удаляет без возможности восстановления
}
}
}
// Запускаем функцию ежедневно через WP Cron
if (!wp_next_scheduled('wprus_daily_delete_old_comments')) {
wp_schedule_event(time(), 'daily', 'wprus_daily_delete_old_comments');
}
add_action('wprus_daily_delete_old_comments', 'wprus_delete_old_comments');
Этот код создаёт задачу, которая каждый день удаляет все комментарии старше 180 дней. Можно менять период, подстраивая под нужды проекта.
Как проверить и отладить автоматическое удаление
Перед тем как запускать автоматическую очистку на боевом сайте, рекомендуется:
- Сделать резервную копию базы данных.
- Вывести на экран список комментариев, которые будут удалены (для теста).
- Запустить код в тестовой среде.
Например, для проверки можно временно заменить wp_delete_comment на вывод print_r($comment_id) или логирование в файл.
Дополнительные советы по управлению комментариями
Для эффективной работы с комментариями стоит также учитывать:
- Использование плагинов антиспама (например, Akismet) для снижения количества нежелательных сообщений.
- Настройку предварительной модерации комментариев.
- Ограничение возможности комментирования старых постов через настройки WordPress.
- Использование плагина Clearfy Pro (wpshop.ru) для комплексной оптимизации и управления комментариями и другими аспектами сайта.
Отключение комментариев на старых записях
Помимо удаления, можно отключить комментарии на постах старше определённого времени. В WordPress это делается в настройках — но для автоматизации подойдет код:
function wprus_close_comments_on_old_posts() {
$days = 180;
$args = [
'date_query' => [
[
'before' => date('Y-m-d', strtotime("-" . $days . " days"))
]
],
'post_type' => 'post',
'posts_per_page' => -1
];
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$post_id = get_the_ID();
if (comments_open($post_id)) {
// Закрываем комментарии
wp_update_post([
'ID' => $post_id,
'comment_status' => 'closed'
]);
}
}
wp_reset_postdata();
}
}
// Запускать по расписанию по необходимости
Такой подход помогает не накапливать новые комментарии на старых материалах.