Как настроить автоматическое добавление атрибута "nofollow" к внешним ссылкам в WordPress-комментариях?
Здравствуйте! У меня возникла проблема с настройкой автоматического добавления атрибута "nofollow" к внешним ссылкам в WordPress-комментариях. Я хотел бы попросить вашей помощи в решении этой проблемы.
Я использую стандартный функционал комментариев WordPress, но необходимо, чтобы все внешние ссылки, вставленные в комментарии пользователей, автоматически получали атрибут "nofollow".
Вот пример кода, который я использую в настоящий момент:
function add_nofollow_to_comments( $text ) {
$pattern = '/<a(.*?) href=("|')(https?://([^"']+))(.*?)("|')(.*?)>/i';
$replacement = '<a$1 href=$2$3$4$5$6 rel="nofollow"$7>';
$text = preg_replace( $pattern, $replacement, $text );
return $text;
}
add_filter( 'comment_text', 'add_nofollow_to_comments' );
К сожалению, данный код не работает, и атрибут "nofollow" не добавляется. Что я делаю не так? Как мне исправить эту проблему и настроить автоматическое добавление атрибута "nofollow" к внешним ссылкам в WordPress-комментариях?
Большое спасибо за помощь!
Ответы:
- проверьте правильность написания и синтаксиса регулярного выражения в вашем коде.
Вместо использования функции preg_replace вам следует использовать функцию preg_replace_callback для корректной обработки атрибутов ссылок.
: проверьте, что функция add_filter('comment_text', 'add_nofollow_to_comments') правильно подключена в вашем коде и что нет других плагинов или настроек, которые могут заменять или предотвращать добавление атрибута "nofollow" к внешним ссылкам в комментариях WordPress.
- убедитесь, что функция add_nofollow_to_comments вызывается в нужном контексте и проверьте, работает ли фильтр comment_text.
Проблема с кодом, который вы используете, заключается в неправильном использовании регулярного выражения. Для того, чтобы обрабатывать HTML-теги в комментариях, необходимо использовать специальные функции для работы с DOM-структурой. Вместо того, чтобы использовать регулярное выражение, предлагаю вам воспользоваться следующим кодом:
function add_nofollow_to_comments( $comment_text ) {
$dom = new DOMDocument();
$dom->loadHTML( $comment_text );
$links = $dom->getElementsByTagName( 'a' );
foreach ( $links as $link ) {
$href = $link->getAttribute( 'href' );
if ( strpos( $href, home_url() ) === false ) {
$link->setAttribute( 'rel', 'nofollow' );
}
}
$new_comment_text = $dom->saveHTML();
return $new_comment_text;
}
add_filter( 'comment_text', 'add_nofollow_to_comments' );
В этом коде мы используем DOMDocument для обработки HTML-кода комментария. Мы получаем все теги и проверяем каждую ссылку. Если ссылка не содержит вашего домена (проверяется с помощью функции home_url()), то мы добавляем атрибут rel="nofollow".
Теперь, когда вы примените этот код, все внешние ссылки в комментариях будут автоматически получать атрибут "nofollow".
Надеюсь, это поможет вам! Если у вас есть еще вопросы, не стесняйтесь задавать. Удачи!