Не учитывать внутренние ссылки при блокировке комментария из-за ссылок
В WordPress есть встроенная функция, которая отправляет на модерацию комментарий, если он содержит ссылок больше указанного количества.
Есть ли какое-то решение для того, чтобы внутренние ссылки при этом не учитывались?
Заглянул я в коды... Можно сделать, но не без костылей. Хук в ВП есть, но он какой-то странный...
Короче, делается так...
/** * Если включена настройка, блокировать комментарий, когда в нем ссылок больше указанного количества. * То WordPress считает все ссылки, включая внутренние. * Этот хак изменяет логику подсчета и не считает внутренние ссылки: когда совпадает домен или когда ссылка начинается с '/' */ add_filter('comment_max_links_url', 'my_comment_links_count'); function my_comment_links_count( $num ){ // поле комментария должно иметь атрибут name=comment иногда всякие спам блокеры его меняют... $comment_content = wp_unslash($_POST['comment']); if( ! $comment_content ) return $num; // контента нет или его не удалось получить - ничего не делаем... preg_match_all('~<a [^>]*href=([\'"])([^\'"]+)\1~i', $comment_content, $match ); $num = 0; // обнуляем foreach( $match[2] as $url ){ $url = trim($url); if( $url{0} === '/' ) continue; // внутряк if( strpos($url, $_SERVER['HTTP_HOST']) ) continue; // внутряк $num++; // +1 } return $num; }Код вставляем в файл темы functions.php
Хук нам контент комментария не передает, поэтому приходится брать его из глобальной переменной $_POST['comment'], а она иногда может называться по-другому...