Количество внешних ссылок в комментариях - Опция Модерации
Я только что столкнулся с проблемой правильного использования количества внешних (то есть без относительных или абсолютных ссылок на мой собственный блог) ссылок в моем блоге для Модерации комментариев Опция подсчета.
Он помечен Удерживайте комментарий в очереди, если он содержит [ваш номер здесь] или несколько ссылок. (Общей характеристикой спама комментариев является большое количество гиперссылок.) в Настройках -> Обсуждение в бэкэнде Wordpress. Снимок экрана:
Я знаю, что в настоящее время он подсчитывает все ссылки в списке. ссылки на блог и другие комментарии (сообщили об этом здесь: #14681) но я не могу себе представить, что уже нет плагина или взлома, который бы правильно корректировал количество только внешних ссылок.
Итак, мой вопрос: Есть ли плагин/хак, который заставляет Wordpress правильно учитывать только внешние ссылки в комментариях для параметров модерации?
2 answers
Ха-ха, я действительно придумал, как это сделать. Как плагин, это должно работать.
class JPB_CommentCounter {
var $count = 0;
function __construct(){
add_filter( 'pre_comment_content', array( $this, 'content' ), 100 );
add_filter( 'comment_max_links_url', array( $this, 'counter' ) );
}
function JPB_CommentCounter(){
$this->__construct();
}
function counter( $num, $url ){
if($this->count < 1)
return $num;
elseif( $this->count > $num )
return 0;
else
return $num - $this->count;
}
function content( $content ){
$homeurl = preg_quote( home_url() );
if( preg_match_all( '@<a [^>]*href=[\'|"](/|'.$homeurl.')@i', $content, $matches ) )
$this->count = count($matches[0]);
return $content;
}
}
$JPBCC = new JPB_CommentCounter();
Я должен добавить, что я никоим образом не проверял это. Но теоретически это должно сработать.
Теперь я написал полный плагин для этого, который предлагает базовый интерфейс подсчета ссылок для добавления комментариев с wordpress 3.0. В дополнение к тому, что предложил Джон, я внес некоторые изменения/добавления, основанные на отслеживании крючков, вызванных добавлением комментария, так как я хотел, чтобы это выполнялось только при фактическом добавлении нового комментария.
Поэтому я выбрал comment_text
вместо крючка pre_comment_content
. Остальное в основном то же самое, но были добавлены некоторые проверки на вменяемость, так что это только get выполняется один раз и только при добавлении нового комментария. Дополнительной (но в настоящее время не выполненной) проверкой было бы включить ее только после того, как опция comment_max_links
была прочитана get_option()
(pre_option_comment_max_links
-крючок), но на данный момент это прошло тестирование, я пока этого не сделал.
Исходный код можно просмотреть онлайн в trac.
Я дам ответ Джону, даже если я не выбирал его предложение, так как он сначала опубликовал здесь тот же принцип.