Я просто столкнулся с проблемой, чтобы правильно использовать счетчик внешних (то есть не относительных или абсолютных ссылок на свой блог) ссылок в моем блоге для параметра модерации комментариев .
Он помечен Оставить комментарий в очереди, если он содержит [ваш номер здесь] или несколько ссылок. (Распространенной характеристикой спама в комментариях является большое количество гиперссылок.) в меню "Настройки" -> "Обсуждение в Wordpress Back-end". Скриншот:
Я знаю, что в настоящее время он считает все ссылки инкл. ссылки на блог и другие комментарии (сообщили об этом здесь: # 14681 ), но я не могу представить, что там нет плагина или взлома уже доступны это правильно исправляет счет только внешние ссылки.
Итак, мой вопрос: есть ли плагин/хак, который заставляет Wordpress правильно подсчитывать только внешние ссылки в комментариях для его параметров модерации?
Ха-ха, я действительно нашел способ сделать это. Как плагин, это должно работать.
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
hook. Остальное в основном то же самое, но некоторые проверки работоспособности были добавлены так, чтобы он выполнялся только один раз и только при добавлении нового комментария. Дополнительной (но в настоящее время не реализованной) проверкой было бы включение ее только после того, как опция comment_max_links
была прочитана функцией get_option()
(ловушка pre_option_comment_max_links
-), но на данный момент это тестирование прошло, я пока не делал этого.
Исходный код можно просмотреть в режиме онлайн .
Я дам ответ Джону, даже если я не выбрал его предложение, поскольку он сначала опубликовал тот же принцип здесь.