WordPress: простой способ отлючить трекбеки для части постов (без плагинов)

Владимир | | MySQL, WordPress.

wordpress block trackback

С недавних пор этот блог опять стали одолевать спамеры. Не знаю с чем это связано, больше года всё было относительно спокойно. Проскакивало по несколько спамерских комментариев в неделю, явно написанных людьми, а не ботами, и всё. А тут по 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, главное, найти какое поле отвечает за отключение трекбеков.

Успехов!

Интересно почитать:

Мы знаем, где можно скачать договор лизинга