Спам в комментариях — одна из частых проблем, с которой сталкиваются владельцы сайтов на WordPress. Он не только портит внешний вид сайта, но и нагружает базу данных, снижая производительность. В этой статье мы рассмотрим, как настроить автоматическое удаление спама в комментариях на вашем сайте с помощью плагинов и кастомных функций, что особенно актуально для пользователей wp-kurs.ru.
Почему важно избавляться от спама в комментариях
Спам-комментарии содержат нежелательные ссылки и текст, часто связанный с рекламой или фишингом. Помимо визуального загрязнения, они создают нагрузку на сервер и могут негативно сказаться на SEO вашего сайта. Кроме того, большое количество спама затрудняет модерацию настоящих комментариев.
Стандартный механизм WordPress для борьбы со спамом — это система комментариев с модерацией, но вручную удалять каждое сообщение неудобно и долго. Вот почему автоматизация этого процесса — важный шаг для любого сайта.
Использование плагинов для автоматического удаления спама
Существует несколько популярных плагинов, которые позволяют эффективно бороться со спамом в комментариях. Рассмотрим самые надежные и функциональные.
1. Akismet Anti-Spam
Akismet — самый известный и широко используемый плагин для фильтрации спама. Он подключается к облачному сервису, который анализирует комментарии и автоматически помечает подозрительные как спам.
Преимущества:
- Высокая точность определения спама;
- Автоматическое перемещение спама в отдельную папку;
- Возможность автоматического удаления спама старше определенного срока.
Для активации автоматического удаления можно добавить в файл functions.php следующую функцию, которая будет удалять спам старше 7 дней:
function wp_kurs_delete_old_spam_comments() {
global $wpdb;
$days = 7; // количество дней
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_date < DATE_SUB(NOW(), INTERVAL %d DAY)",
$days
)
);
}
add_action('wp_scheduled_delete', 'wp_kurs_delete_old_spam_comments');Затем достаточно настроить WP-Cron для регулярного вызова события wp_scheduled_delete.
2. Anti-Spam Bee
Этот плагин не требует подключения к сторонним сервисам и отлично подходит для европейских сайтов благодаря поддержке GDPR. Он фильтрует спам по различным признакам, включая IP и поведенческие факторы.
Anti-Spam Bee также позволяет автоматически удалять спам через заданное время в настройках плагина без необходимости дополнительного кода.
3. WP-SpamShield
Комбинирует защиту от спама в комментариях, регистрациях и формах. Не требует CAPTCHA и работает прозрачно для пользователей.
Плагин автоматически удаляет спам, который он не может пропустить. Для дополнительной автоматизации можно использовать WP-Cron и кастомные функции, похожие на пример с Akismet.
Кастомные методы автоматического удаления спама
Если вы предпочитаете минимизировать использование плагинов, можно реализовать автоматическое удаление спама с помощью собственного кода.
Настройка WP-Cron для удаления спама
WP-Cron — встроенный планировщик задач в WordPress, который позволяет запускать функции по расписанию. Ниже пример функции, которая удаляет спам-комментарии старше 10 дней и запускается раз в сутки.
function wp_kurs_auto_delete_spam_comments() {
global $wpdb;
$days = 10;
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_date < DATE_SUB(NOW(), INTERVAL %d DAY)",
$days
)
);
}
if (!wp_next_scheduled('wp_kurs_daily_spam_cleanup')) {
wp_schedule_event(time(), 'daily', 'wp_kurs_daily_spam_cleanup');
}
add_action('wp_kurs_daily_spam_cleanup', 'wp_kurs_auto_delete_spam_comments');Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. Он автоматически запускает удаление спама каждые 24 часа.
Отправка уведомлений при удалении спама
Для контроля можно добавить уведомления на email администратора, чтобы знать, когда и сколько спам-комментариев было удалено:
function wp_kurs_notify_spam_deletion() {
global $wpdb;
$days = 10;
$count_before = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 'spam'");
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_date < DATE_SUB(NOW(), INTERVAL %d DAY)",
$days
)
);
$count_after = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_approved = 'spam'");
$deleted = $count_before - $count_after;
if ($deleted > 0) {
wp_mail(get_option('admin_email'), 'Удаление спама на сайте', "Автоматически удалено $deleted спам-комментариев.");
}
}
if (!wp_next_scheduled('wp_kurs_daily_spam_cleanup_notify')) {
wp_schedule_event(time(), 'daily', 'wp_kurs_daily_spam_cleanup_notify');
}
add_action('wp_kurs_daily_spam_cleanup_notify', 'wp_kurs_notify_spam_deletion');Дополнительные советы по борьбе со спамом
Использование reCAPTCHA в формах комментариев
Добавление Google reCAPTCHA — эффективный способ снизить количество спам-комментариев. Для этого можно использовать популярные плагины, например Advanced noCaptcha & invisible Captcha, или внедрить вручную.
Пример интеграции reCAPTCHA v2 в форму комментариев:
// В functions.php
function wp_kurs_add_recaptcha_script() {
echo '<script src="https://www.google.com/recaptcha/api.js" async defer></script>';
}
add_action('wp_footer', 'wp_kurs_add_recaptcha_script');
function wp_kurs_add_recaptcha_field() {
echo '<div class="g-recaptcha" data-sitekey="ВАШ_SITE_KEY"></div>';
}
add_action('comment_form_after_fields', 'wp_kurs_add_recaptcha_field');
function wp_kurs_verify_recaptcha($commentdata) {
$response = wp_remote_post('https://www.google.com/recaptcha/api/siteverify', array(
'body' => array(
'secret' => 'ВАШ_SECRET_KEY',
'response' => $_POST['g-recaptcha-response']
)
));
$response_body = wp_remote_retrieve_body($response);
$result = json_decode($response_body);
if (!$result->success) {
wp_die('Ошибка: Пожалуйста, подтвердите, что вы не робот.');
}
return $commentdata;
}
add_filter('preprocess_comment', 'wp_kurs_verify_recaptcha');Не забудьте заменить ВАШ_SITE_KEY и ВАШ_SECRET_KEY на ваши ключи Google reCAPTCHA.
Отключение комментариев для старых записей
Спам часто приходит на старые записи, потому что они не модерируются активно. Вы можете автоматизировать отключение комментариев для записей старше определенного времени:
function wp_kurs_disable_comments_on_old_posts($open, $post_id) {
$post = get_post($post_id);
$days = 60; // количество дней
$post_date = strtotime($post->post_date);
if (time() - $post_date > $days * DAY_IN_SECONDS) {
return false;
}
return $open;
}
add_filter('comments_open', 'wp_kurs_disable_comments_on_old_posts', 10, 2);Это снизит количество спам-попыток на старых страницах.
Заключение
Автоматическое удаление спама в комментариях — важный этап поддержания чистоты и производительности сайта на WordPress. Использование надежных плагинов, таких как Akismet или Anti-Spam Bee, в сочетании с кастомными WP-Cron задачами и дополнительными мерами, такими как reCAPTCHA и закрытие комментариев на старых записях, позволит эффективно справиться с проблемой.
На wp-kurs.ru вы можете легко внедрить эти решения, чтобы сосредоточиться на создании качественного контента, не тратя время на борьбу со спамом.