Плагин Akismet удаляет спам, несмотря на предпочтения
Любопытно, что Akismet удаляет старые комментарии со спамом через некоторое время (я предполагаю, что в течение недели).
Этот флажок НЕ отмечен:
Автоматическое удаление спама, отправленного в сообщениях более чем месячной давности.
Я отправил сообщение в службу поддержки Akismet более недели назад, но до сих пор не получил ответа.
Я не хочу, чтобы Akismet что-либо удалял. Я не проверяю достаточно часто, чтобы проверить ложные срабатывания, поэтому я хочу, чтобы все комментарии сохраняются на неопределенный срок, даже спам.
Кто-нибудь знает, почему он удаляет спам-комментарии, даже если он настроен не так? Кто-нибудь знает обходной путь?
2 answers
Я бы вообще не рекомендовал изменять файлы для плагинов, которые вы не контролируете. Лучше было бы написать свой собственный сайт/пользовательский плагин, чтобы управлять этим крючком:
add_action('akismet_scheduled_delete', 'akismet_delete_old');
Во-первых, чтобы полностью остановить удаление, просто вызовите:
remove_action('akismet_scheduled_delete', 'akismet_delete_old');
Затем вы можете настроить задание cron (или аналогичное), чтобы запустить функцию akismet_delete_old()
на любой частоте, которую вы предпочитаете.
Редактировать
Чтобы быть более ясным: я имею в виду сайт/пользовательский плагин, который взаимодействует с Акисмет - невилка/замена Akismet. Поскольку Akismet добавляет функцию удаления комментариев в качестве обратного вызова для крючка действия, специфичного для плагина, вы можете переопределить это добавленное действие из за пределами Плагина.
Вызов remove_action()
выше просто остановит выполнение кода удаления комментариев вообще. Если вы хотите включить менее частое удаление комментариев, вы можете использовать несколько методов:
- Перепишите обратный вызов
akismet_delete_old()
(как вы сделали в своем собственный ответ), а затем подключите его кakismet_scheduled_delete
- Напишите свое собственное задание cron для запуска на желаемой частоте
- И т.д.
Примечание: существует сопутствующий обратный вызов akismet_delete_old_meta()
, который также может потребоваться изменить/удалить из действия akismet_scheduled_delete
.
Во-первых, нет настройки, запрещающей удалять спам-комментарии. Мое замешательство было вызвано неоднозначной формулировкой на странице конфигурации Akismet...
Автоматическое удаление спама, отправленного в сообщениях более чем месячной давности.
" более месяца назад" относится к "сообщениям", которым больше месяца, а не к "спаму, отправленному в сообщениях", которым больше месяца.
Что касается первоначального вопроса о том, как остановить комментарии после удаления...
Они автоматически удаляются через 15 дней, независимо от того, что . Akismet думает, что им лучше знать! Они предполагают, что вы хотите удалить спам через 2 недели, потому что они также предполагают, что 15 дней - это более чем достаточно времени для вас, чтобы убедиться, что комментарий был помечен правильно.
Я спросил их, почему они не могут просто предоставить пользователю возможность выбора, и я получил некоторое оправдание о том, как тысячи спам-комментариев могут отключить сервер. Хорошо, это правда. Но то же самое может произойти, если плагин Akismet не был установлен в первую очередь. Отдайте должное администратору за то, что он может принять собственное решение относительно своей установки. Но этого не произойдет.
Я понимаю, что редактирование основных файлов не одобряется, но вот как я решил справиться с этим для своего собственного сайта.
Эта строка в файле wp-content/plugins/akismet/akismet.php
...
$comment_ids = $wpdb->get_col("SELECT comment_id FROM $wpdb->comments WHERE
DATE_SUB('$now_gmt', INTERVAL 15 DAY) > comment_date_gmt AND
comment_approved = 'spam'");
Я отредактировал INTERVAL 15 DAY
до 180 дней, что дало мне более чем достаточно времени для просмотра комментариев перед удалением.
РЕДАКТИРОВАТЬ:
Каждый раз, когда плагин обновляется, такая модификация должна быть применена повторно.
РЕДАКТИРОВАТЬ 2:
Согласно полезному предложению @Chipbennett, я создал плагин, который ничего не делает, кроме как отключает удаление комментариев плагином Akismet. Эта простая вещь позволяет избежать всей проблемы, связанной с необходимостью изменения плагина Akismet.
Я просто создал следующий файл php
и поместил его в каталог плагинов (wp-content/plugins/
)
<?php
/**
* @package Akismet_keep_comment
* @version 1.0
*/
/*
Plugin Name: Akismet Keep Comment
Plugin URI:
Description: This plugin removes the comment deletion ability of the Akismet plugin
Author: Me
Version: 1.0
Author URI: http://www.mysite.com
*/
remove_action('akismet_scheduled_delete', 'akismet_delete_old');
?>
Затем я "активировал" его через страницу плагина на панели мониторинга.