Спам в комментариях WordPress – одна из самых распространённых проблем, с которой сталкиваются владельцы сайтов. Накопление большого количества спам-комментариев не только загромождает базу данных, но и замедляет работу сайта, что негативно сказывается на SEO и пользовательском опыте. В этой статье разберём, как автоматически удалять спам-комментарии в WordPress, используя готовые плагины и собственные кодовые решения.
Почему важно автоматизировать удаление спама в WordPress
Ручное удаление спам-комментариев — процесс трудоёмкий и неэффективный, особенно если у сайта высокая посещаемость и активность пользователей. Автоматизация позволяет:
- экономить время на модерации;
- поддерживать чистоту базы данных;
- ускорять работу сайта за счёт уменьшения объёма данных;
- повышать уровень безопасности и доверия посетителей.
Существует несколько способов автоматизации, каждый из которых имеет свои преимущества и особенности внедрения.
Использование плагинов для автоматического удаления спам-комментариев
1. Akismet Anti-Spam
Akismet — один из самых популярных и эффективных плагинов для борьбы со спамом. Он автоматически фильтрует комментарии и отправляет подозрительные в папку «Спам».
Для автоматического удаления спам-комментариев через Akismet можно настроить регулярную очистку через WP-Cron или использовать дополнения.
2. WP SpamShield Anti-Spam
Этот плагин предотвращает добавление спама без необходимости CAPTCHA и фильтров. Для автоматического удаления спама можно настроить периодическую чистку в панели управления плагином.
3. Clearfy Pro и инструменты очистки
Если вы используете Clearfy Pro, то в нём есть встроенные инструменты для оптимизации и очистки базы данных от спам-комментариев, что позволяет автоматически удалять их по расписанию.
Пример кода для автоматического удаления спам-комментариев по расписанию
Если вы предпочитаете обойтись без плагинов, можно создать собственный код, который будет автоматически удалять все комментарии со статусом «spam» по расписанию. Для этого воспользуемся WP-Cron.
function wprus_auto_delete_spam_comments() {
global $wpdb;
$wpdb->query( "DELETE FROM $wpdb->comments WHERE comment_approved = 'spam'" );
}
// Регистрируем ежедневное событие
if ( ! wp_next_scheduled( 'wprus_daily_spam_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wprus_daily_spam_cleanup' );
}
// Хук на событие
add_action( 'wprus_daily_spam_cleanup', 'wprus_auto_delete_spam_comments' );Этот код удалит все спам-комментарии раз в сутки. Чтобы добавить код, вставьте его в файл functions.php вашей темы или в собственный плагин.
Оптимизация базы данных после удаления спама
Удаление спам-комментариев уменьшает количество записей в таблице комментариев, но не освобождает место в базе данных полностью. Для оптимизации таблиц используйте функцию:
function wprus_optimize_comments_table() {
global $wpdb;
$wpdb->query( "OPTIMIZE TABLE $wpdb->comments" );
}
add_action( 'wprus_daily_spam_cleanup', 'wprus_optimize_comments_table' );Этот код добавит оптимизацию таблицы комментариев сразу после удаления спама, что повысит производительность базы данных.
Как дополнительно защититься от спама: советы и плагины
Использование reCAPTCHA и Honeypot
Для снижения количества спама полезно добавить защиту форм комментариев. Плагины, например My Popup с поддержкой reCAPTCHA, или специализированные плагины с Honeypot механизмом помогут предотвратить появление нового спама.
Ограничение ссылок в комментариях
Многие спам-комментарии содержат большое количество ссылок. В WordPress есть настройка, позволяющая ограничить количество ссылок в комментариях — это простой и эффективный метод борьбы с нежелательным контентом.
Использование кастомных фильтров в functions.php
Можно добавить фильтр, который будет автоматически помечать комментарии с подозрительными словами или IP-адресами как спам. Например:
function wprus_mark_comment_as_spam( $approved , $commentdata ) {
$blacklist = array('viagra', 'casino', 'loan');
foreach ( $blacklist as $word ) {
if ( stripos( $commentdata['comment_content'], $word ) !== false ) {
return 'spam';
}
}
return $approved;
}
add_filter( 'pre_comment_approved', 'wprus_mark_comment_as_spam', 99, 2 );Этот код проверяет комментарии на наличие запрещенных слов и помечает их как спам автоматически.