С недавних пор этот блог опять стали одолевать спамеры. Не знаю с чем это связано, больше года всё было относительно спокойно. Проскакивало по несколько спамерских комментариев в неделю, явно написанных людьми, а не ботами, и всё. А тут по 10-20 требкеков в день. Удалить их, конечно, не сложно, но надоедает и раздражает, к тому же трекбеки явно ставились автоматически, т.е. спамер своё время на них не тратил.
Вообще я не сторонник отключения каких-либо каналов общения. В теории трекбеки сильно упрощают создание связей между блогами. Но на практике получается, что нормальные требкеки приходят к более-менее новым постам, а спамерские – обычно ко всем подряд.
Поэтому я решил закрыть трекбеки для всех постов старше 2-х месяцев. Ставить специальный плагин для решения этой задачи нет никакой необходимости, всё можно сделать с помощью несложного SQL запроса и cron'а.
Теория
В WordPress все посты хранятся в таблице wp_posts
(префикс wp_
может быть другим). В этой таблице есть поле ping_status
, которому можно присвоить одно из двух значений: «open» или «closed». Как несложно догадаться по названию, значение «closed» отключает трекбеки к данном посту.
Теперь нужно определиться с датами. MySQL поддерживает довольно много функций для работы со временем и датами. Нам потребуются:
1) CURDATE
– возвращает текущую дату;
2) DATE_SUB
– вычитает даты;
и выражение INTERVAL ... DAY
– позволяет указать интервал с заданным количеством дней.
Дата последнего изменения поста хранится в поле post_modified
(таблицы wp_posts
).
Формируем запрос
UPDATE wp_posts SET ping_status="closed" WHERE post_modified < DATE_SUB(CURDATE(), INTERVAL 60 DAY)
Как видите, это обычный UPDATE запрос, который установит полю ping_status
значение «closed» для всех записей у которые последний раз обновлялись более 60-ти дней назад.
Кстати, аналогичным способом можно закрыть и комментарии. Для этого нужно установить значение «closed» для поля «comment_status».
Остаётся настроить периодический запуск этого запроса
Удобнее всего для этого использовать cron. Тут потребуются хотя бы базовые навыки работы с панелью управления хостингом. В большинстве панелей в меню находится ссылка на страницу cron, а для создания задачи нужно заполнить небольшую форму. При этом необходимо указать два обязательных параметра – команду, которую будет выполнять cron, и периодичность её выполнения.
В данном случае команда может выглядеть следующим образом.
mysql --default-character-set=utf8 --user=user_name --password=user_password db_name < path_to/block_trackbacks.sql
Здесь block_trackbacks.sql
– имя файла в котором записан наш запрос.
Периодичность выполнения можно указать – 1 раз в день. Принципиальной роли, в данном случае, она не играет.
Результаты
Как и следовало ожидать, работает данный метод очень неплохо. Количество спама в трекбеках снизилось практически до нуля 😉 И, обратите внимание, данный способ подходит для любой CMS, главное, найти какое поле отвечает за отключение трекбеков.
Успехов!
Интересно почитать:
Мы знаем, где можно скачать договор лизинга