maximus45 04.02.2023 01:28

Как настроить автоматическое добавление атрибута "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-комментариях?

Большое спасибо за помощь!

Ответы:

veronika18Mag 04.02.2023 01:36
- проверьте правильность написания и синтаксиса регулярного выражения в вашем коде.
TMImmigrant24 04.02.2023 01:45
Вместо использования функции preg_replace вам следует использовать функцию preg_replace_callback для корректной обработки атрибутов ссылок.
petrefimov25 04.02.2023 02:03
: проверьте, что функция add_filter('comment_text', 'add_nofollow_to_comments') правильно подключена в вашем коде и что нет других плагинов или настроек, которые могут заменять или предотвращать добавление атрибута "nofollow" к внешним ссылкам в комментариях WordPress.
radushnyy35 04.02.2023 02:27
- убедитесь, что функция add_nofollow_to_comments вызывается в нужном контексте и проверьте, работает ли фильтр comment_text.
poli27 04.02.2023 02:37
Проблема с кодом, который вы используете, заключается в неправильном использовании регулярного выражения. Для того, чтобы обрабатывать 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". Надеюсь, это поможет вам! Если у вас есть еще вопросы, не стесняйтесь задавать. Удачи!

Добавить ответ