Одной из частых проблем на сайтах WordPress является спам в комментариях. Он не только портит статистику, но и может замедлять работу сайта, а также ухудшать пользовательский опыт. В этой статье мы рассмотрим, как с помощью минимальных технических средств настроить автоматическое удаление спама в комментариях, используя стандартные хуки WordPress и кастомный функционал с примером кода.
Почему важно удалять спам в комментариях
Спам-комментарии занимают лишнее место в базе данных, увеличивают время запросов и могут повредить SEO из-за большого количества некачественного контента. Автоматическое удаление таких комментариев позволит:
- Снизить нагрузку на базу данных.
- Поддерживать чистоту и актуальность комментариев.
- Упростить работу администратора — меньше ручной модерации.
Хотя существуют популярные плагины, например, Akismet, которые фильтруют спам, иногда требуется более точечное решение с автоматической очисткой.
Использование WPReg_cron для регулярного удаления спама
WordPress имеет встроенную систему планировщика задач — WP-Cron. Мы можем создать собственную задачу, которая будет запускаться раз в сутки и удалять все комментарии, помеченные как спам.
Шаг 1. Регистрируем кастомное событие WP-Cron
Добавьте следующий код в файл functions.php вашей темы или в собственный плагин:
function wpreg_schedule_spam_cleanup() {
if ( ! wp_next_scheduled( 'wpreg_spam_cleanup_hook' ) ) {
wp_schedule_event( time(), 'daily', 'wpreg_spam_cleanup_hook' );
}
}
add_action( 'wp', 'wpreg_schedule_spam_cleanup' );Этот код проверяет, есть ли уже запланированная задача, и если нет — создает её с запуском раз в сутки.
Шаг 2. Создаем функцию удаления спама
Теперь подключим функцию, которая будет удалять спам-комментарии при срабатывании задачи:
function wpreg_delete_spam_comments() {
global $wpdb;
// Получаем ID всех комментариев, помеченных как спам
$spam_comments = $wpdb->get_col( "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = 'spam'" );
if ( empty( $spam_comments ) ) {
return; // Нет спама
}
foreach ( $spam_comments as $comment_id ) {
wp_delete_comment( $comment_id, true );
}
}
add_action( 'wpreg_spam_cleanup_hook', 'wpreg_delete_spam_comments' );Функция напрямую обращается к базе, получает ID комментариев со статусом spam и удаляет их полностью вместе с метаданными.
Дополнительные советы по борьбе со спамом
Помимо автоматического удаления, рекомендуется применять комплекс мер:
- Использовать плагин Clearfy Pro с функцией защиты от спама, которая помогает блокировать комментарии с типичными признаками.
- Включить в форме комментариев капчу, например через плагин My Popup с поддержкой Google reCAPTCHA.
- Ограничить возможность оставлять комментарии только зарегистрированным пользователям.
Пример добавления капчи в форму комментариев
Добавим вызов капчи в форму комментариев, если вы используете плагин My Popup с поддержкой reCAPTCHA:
function wpreg_add_recaptcha_to_comment_form() {
echo do_shortcode('[my_popup_recaptcha]');
}
add_action( 'comment_form_after_fields', 'wpreg_add_recaptcha_to_comment_form' );Это добавит капчу сразу после полей формы, что значительно снизит количество спам-ботов.
Как проверить работу автоматического удаления спама
Чтобы проверить, что задача работает корректно, можно временно изменить интервал запуска с daily на hourly и вручную добавить несколько комментариев со статусом спам в базе через phpMyAdmin или вручную пометить комментарии как спам в админке.
Также можно вызвать функцию удаления напрямую для теста:
wpreg_delete_spam_comments();После этого проверьте, что спам-комментарии исчезли из админки.
Выводы и рекомендации
Автоматизация удаления спама в комментариях с помощью WP-Cron и кастомных функций позволяет держать базу данных чистой и снижать нагрузку на сайт. В сочетании с плагинами для защиты от спама и капчей вы получите надежный комплекс защиты.
Если хотите расширить функционал — можно добавить уведомления администратору о количестве удаленных комментариев, логирование или очистку других типов мусора.