Спам в комментариях — одна из самых распространенных проблем на сайтах WordPress. Это не только загромождает базу данных, но и негативно сказывается на репутации сайта. В этой статье мы подробно разберем, как создать собственный плагин для автоматического удаления спам-комментариев. Такой подход позволит вам контролировать процесс очистки и при необходимости легко расширять функционал.
Почему стоит автоматизировать удаление спама в комментариях WordPress
Удаление спама вручную — утомительный и времязатратный процесс. Особенно если ваш сайт популярен и комментарии оставляют активно. Автоматизация помогает:
- Экономить время на модерацию;
- Поддерживать чистоту базы данных и улучшать производительность;
- Снижать нагрузку на сервер;
- Поддерживать высокий уровень пользовательского опыта.
Существуют популярные плагины, например, Akismet или Antispam Bee, но иногда хочется полного контроля или добавления уникальных условий удаления. В этом случае создание собственного плагина — оптимальное решение.
Основы создания плагина для автоматического удаления спама в WordPress
Плагин будет запускаться по расписанию и удалять спам-комментарии, которые старше определенного времени. Это позволит не удалять свежий спам мгновенно, чтобы при желании можно было восстановить ошибочно помеченные комментарии.
Начнем с создания базового плагина. Для этого создайте папку wpcheck-spam-cleaner в директории wp-content/plugins и файл wpcheck-spam-cleaner.php внутри нее.
<?php
/**
* Plugin Name: WPCheck Spam Cleaner
* Description: Автоматическое удаление спам-комментариев старше 7 дней.
* Version: 1.0
* Author: WPCheck
*/
// Код плагина будет здесь
Регистрация события для автоматического удаления спама
Для автоматизации воспользуемся WP Cron — встроенной системой планировщика задач WordPress. Создадим функцию, которая будет удалять спам-комментарии старше 7 дней и зарегистрируем ее выполнение раз в сутки.
function wpcheck_delete_old_spam_comments() {
global $wpdb;
$days = 7;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
// Получаем ID спам-комментариев старше 7 дней
$spam_comment_ids = $wpdb->get_col($wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_date < %s",
$date_threshold
));
if (!empty($spam_comment_ids)) {
foreach ($spam_comment_ids as $comment_id) {
wp_delete_comment($comment_id, true); // Полное удаление
}
}
}
// Планируем задачу при активации плагина
function wpcheck_schedule_spam_cleanup() {
if (!wp_next_scheduled('wpcheck_daily_spam_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpcheck_daily_spam_cleanup');
}
}
add_action('wp', 'wpcheck_schedule_spam_cleanup');
// Привязываем функцию удаления к событию
add_action('wpcheck_daily_spam_cleanup', 'wpcheck_delete_old_spam_comments');
// Удаляем запланированное событие при деактивации плагина
function wpcheck_unschedule_spam_cleanup() {
$timestamp = wp_next_scheduled('wpcheck_daily_spam_cleanup');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpcheck_daily_spam_cleanup');
}
}
register_deactivation_hook(__FILE__, 'wpcheck_unschedule_spam_cleanup');
Улучшение плагина: настройки и безопасность
Чтобы сделать плагин удобнее, добавим страницу настроек в админ-панель, где пользователь сможет менять количество дней хранения спам-комментариев перед удалением.
Добавление страницы настроек
Используем стандартные возможности WordPress для создания меню и сохранения опций.
function wpcheck_spam_cleaner_menu() {
add_options_page(
'WPCheck Spam Cleaner Настройки',
'Spam Cleaner',
'manage_options',
'wpcheck-spam-cleaner',
'wpcheck_spam_cleaner_settings_page'
);
}
add_action('admin_menu', 'wpcheck_spam_cleaner_menu');
function wpcheck_spam_cleaner_settings_page() {
if (!current_user_can('manage_options')) {
wp_die('Недостаточно прав для доступа к этой странице.');
}
// Обработка сохранения настроек
if (isset($_POST['wpcheck_spam_days'])) {
$days = intval($_POST['wpcheck_spam_days']);
if ($days > 0) {
update_option('wpcheck_spam_days', $days);
echo '<div class="updated">Настройки сохранены.</div>';
} else {
echo '<div class="error">Введите корректное значение.</div>';
}
}
$current_days = get_option('wpcheck_spam_days', 7);
?>
<div class="wrap">
<h1>Настройки WPCheck Spam Cleaner</h1>
<form method="post" action="">
<label for="wpcheck_spam_days">Удалять спам старше (дней):</label><br>
<input type="number" id="wpcheck_spam_days" name="wpcheck_spam_days" value="<?php echo esc_attr($current_days); ?>" min="1" /><br><br>
<input type="submit" class="button-primary" value="Сохранить" />
</form>
</div>
<?php
}
Обновление функции удаления для учета настройки
Теперь функция удаления будет использовать сохраняемое значение дней из настроек.
function wpcheck_delete_old_spam_comments() {
global $wpdb;
$days = get_option('wpcheck_spam_days', 7);
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$spam_comment_ids = $wpdb->get_col($wpdb->prepare(
"SELECT comment_ID FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_date < %s",
$date_threshold
));
if (!empty($spam_comment_ids)) {
foreach ($spam_comment_ids as $comment_id) {
wp_delete_comment($comment_id, true);
}
}
}
Дополнительные советы по борьбе со спамом в комментариях WordPress
Хотя автоматическое удаление помогает поддерживать порядок, лучше комбинировать его с другими мерами:
- Используйте плагины антиспама, например, Akismet, чтобы минимизировать попадание спама;
- Включайте модерацию комментариев — требует ручного одобрения новых комментариев;
- Добавляйте капчу для защиты формы комментариев от ботов;
- Ограничивайте ссылки в комментариях, так как спамеры часто добавляют много ссылок;
- Регулярно обновляйте WordPress и плагины для обеспечения безопасности;
- Настройте уведомления и регулярно проверяйте журнал спама.
Комбинируя эти подходы с нашим плагином, вы добьетесь максимальной эффективности в борьбе со спамом.
Заключение
Создание собственного плагина для автоматического удаления спам-комментариев в WordPress — отличный способ держать сайт в порядке и оптимизировать работу. Благодаря функционалу планировщика задач и простому коду вы сможете легко контролировать процесс очистки и настраивать параметры под свои нужды. Используйте приведенный пример в качестве основы и расширяйте его, добавляя новые функции и интеграции.