Спам-комментарии — одна из самых частых проблем, с которой сталкиваются владельцы сайтов на WordPress. Они не только загромождают базу данных, но и снижают качество сайта в глазах пользователей и поисковых систем. В этой статье мы подробно разберем, как создать собственный плагин, который будет автоматически удалять спам комментарии, используя встроенные возможности WordPress и дополнительные фильтры.
Почему стоит создавать собственный плагин для удаления спама
Существуют популярные плагины, такие как Akismet и Antispam Bee, которые эффективно борются со спамом. Однако иногда их функционала недостаточно, или хочется дополнительно автоматизировать процесс удаления старых спам-комментариев, чтобы не копить их в базе. Создание собственного плагина позволяет:
- Автоматизировать удаление спама по расписанию;
- Настроить фильтры под конкретные условия;
- Избавиться от лишних плагинов и уменьшить нагрузку на сайт;
- Получить контроль над процессом и логику удаления.
Далее мы создадим минимальный плагин, который будет удалять все спам комментарии старше 7 дней. Это простое, но эффективное решение для поддержания чистоты базы.
Создание плагина: структура и базовый код
Для начала создайте папку wp-market-spam-cleaner в директории wp-content/plugins/. Внутри создайте файл wp-market-spam-cleaner.php и добавьте в него следующий код:
<?php
/**
* Plugin Name: WP Market Spam Cleaner
* Description: Автоматическое удаление спам комментариев старше 7 дней.
* Version: 1.0
* Author: WP Market
*/
// Безопасность
if (!defined('ABSPATH')) {
exit;
}
// Функция удаления спама
function wpmarket_delete_old_spam_comments() {
global $wpdb;
$days = 7; // удалять спам старше 7 дней
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$query = $wpdb->prepare(
"DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_date < %s",
$date
);
$deleted = $wpdb->query($query);
if ($deleted !== false) {
error_log("[WP Market Spam Cleaner] Удалено спам комментариев: " . $deleted);
}
}
// Добавляем CRON задачу при активации плагина
function wpmarket_spam_cleaner_activate() {
if (!wp_next_scheduled('wpmarket_spam_cleaner_cron')) {
wp_schedule_event(time(), 'daily', 'wpmarket_spam_cleaner_cron');
}
}
register_activation_hook(__FILE__, 'wpmarket_spam_cleaner_activate');
// Удаляем CRON задачу при деактивации
function wpmarket_spam_cleaner_deactivate() {
wp_clear_scheduled_hook('wpmarket_spam_cleaner_cron');
}
register_deactivation_hook(__FILE__, 'wpmarket_spam_cleaner_deactivate');
// Обработчик CRON
add_action('wpmarket_spam_cleaner_cron', 'wpmarket_delete_old_spam_comments');
В этом коде:
- Создается функция
wpmarket_delete_old_spam_comments, которая удаляет из базы все комментарии со статусомspam, старше 7 дней. - При активации плагина регистрируется ежедневная CRON-задача, которая вызывает эту функцию.
- При деактивации плагина задача отменяется.
- Для безопасности проверяется константа
ABSPATH.
Как расширить функциональность плагина: фильтрация и уведомления
Можно добавить дополнительные фильтры и настройки, чтобы плагин был более гибким и информативным.
Добавление фильтра по ключевым словам
Иногда хочется удалять не весь спам, а только комментарии, содержащие определенные слова. Для этого можно изменить SQL-запрос, добавив условие:
$keywords = ['viagra', 'casino', 'loan'];
$like_clauses = [];
foreach ($keywords as $word) {
$like_clauses[] = $wpdb->prepare("comment_content LIKE %s", '%' . $wpdb->esc_like($word) . '%');
}
$like_sql = implode(' OR ', $like_clauses);
$query = $wpdb->prepare(
"DELETE FROM $wpdb->comments WHERE comment_approved = 'spam' AND comment_date < %s AND (" . $like_sql . ")",
$date
);
Это позволит удалять только комментарии с перечисленными ключевыми словами.
Отправка уведомлений администратору
Для контроля можно отправлять письмо администратору после выполнения очистки:
if ($deleted !== false && $deleted > 0) {
$admin_email = get_option('admin_email');
wp_mail(
$admin_email,
'WP Market Spam Cleaner: удалено комментариев',
"Удалено спам комментариев: " . $deleted
);
}
Использование плагина с WPRemark для управления отзывами
Если на вашем сайте установлен плагин WPRemark, который управляет отзывами, можно интегрировать очистку спам-отзывов, расширив условие удаления и добавив дополнительные фильтры по мета-данным отзывов.
Для этого достаточно в функции удаления добавить проверку мета-данных и соответствующие условия.
Такой подход поможет поддерживать базу отзывов в чистоте, автоматически удаляя нежелательные записи.
Советы по тестированию и отладке
После активации плагина важно убедиться, что он работает корректно:
- Проверьте наличие спам комментариев в админке;
- Вручную запустите функцию очистки, вызвав
wpmarket_delete_old_spam_comments()через WP-CLI или временно добавив вызов в шаблон; - Убедитесь, что CRON-задача срабатывает (можно посмотреть с помощью плагина WP Crontrol);
- Проверьте логи и почту администратора на предмет уведомлений.
Если хотите более сложный интерфейс, можно добавить страницу настроек с выбором периода очистки, ключевых слов и опций уведомлений.