Как убрать nofollow из записей и комментариев

В комментариях к посту Как убрать nofollow из комментариев | NoFollow Free меня спросили, а как вообще убрать атрибут nofollow из ссылок без использования плагинов? Я вспомнил ручной метод редактирования, однако поразмыслив позже, убедился, что действительно существует универсальный метод избавления от nofollow.

Ручной метод основан на редактировании файла comment-template.php, который находится в wp-includes. В этом файле нужно удалить все rel=”nofollow” и rel=”external nofollow”. Метод работает, но у него есть один существенный недостаток: после обновления WordPress вам снова придется редактировать этот файл.

Существует более универсальный способ избавиться от nofollow в блоге, не редактируя файлы движка. Он основан на использовании фильтра, который прописывается в файле functions.php. Откройте этот файл и добавьте в него такие строчки:

function comment_author_link_follow_innewwindow() {
global $comment;
$url    = get_comment_author_url();
$author = get_comment_author();
if ( empty( $url ) || 'http://' == $url )
$return = $author;
else
$return = "<a href="$url" target="_blank" rel="external">$author</a>";
return $return;
}
add_filter('get_comment_author_link', 'comment_author_link_follow_innewwindow');

Этот фильтр убирает nofollow в ссылках авторов комментариев, ведущих на их сайты. А чтобы убрать nofollow в ссылках из текста комментариев и текста постов, нужно добавить такой фильтр:

function remove_nofollow($string) {
 $string = str_ireplace(' rel="nofollow"', '', $string);
 return $string;
}
add_filter('the_content', 'remove_nofollow'); // удаляем nofollow для текстов статей
add_filter('comment_text', 'remove_nofollow'); // удаляем nofollow для текстов комментариев

Если у вас используется не просто rel=»nofollow», а rel=»external nofollow», то нужно добавить еще один фильтр:

function remove_nofollow($string) {
 $string = str_ireplace(' rel="external nofollow"', '', $string);
 return $string;
}
add_filter('the_content', 'remove_nofollow'); // удаляем nofollow для текстов статей
add_filter('comment_text', 'remove_nofollow'); // удаляем nofollow для текстов комментариев

Это решение не зависит от обновлений, и относится только к текущей теме.

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. Other

    Интересно конечно, только вот когда я вставил эти строки в файл темы: function.php, у меня вверху сайта появились эти строки и все! Может их нужно какими-то тегами закрыть или что?

    Ответить
    1. tiaurus

      А куда вы их ставите? Поставьте в самое начало, на следующей строчке сразу после

      <?php
      Ответить
  2. Other

    Забыл поставить галочку, чтобы получать комменты по мылу!:)

    Ответить
    1. Other

      А я ставил вне тегов

      Ответить
  3. Other

    Сайт переставал работать, если я добавлял одновременно функцию «…чтобы убрать nofollow» и функцию для «…не просто rel=»nofollow», а rel=»external nofollow».

    Оставил только вторую и сайт заработал.

    Ответить
  4. Алексей

    Почему-то не получается никак…

    Ответить
  5. GrandTourist

    Тоже озадачился вопросом удаления а rel=»external nofollow». Воспользовался вышими скриптами и вот рез-тат:

    Первая функция прекрасно убирает nofollow.
    А вот третья никак не хочет убирать rel=»external «.

    В итоге я воспользовался только одной первой функцией, убрав rel=’external’ в строке $return = «$author«;

    всё вроде работает адекватно.

    Я в программинге не очень, поэтому буду признателен, если уважаемый автор прокомментирует такой вариант.
    Т.е. в принципе можно ли вносит такие правки?

    Ответить
    1. А чем вам external не угодил? Оставьте этот тег в покое, не заморачивайтесь особо на его счет. Уберите nofollow — и будет вам счастье.
      Ну а по поводу правок — можно :)

      Ответить
  6. Иван

    Можно установить плагин Dofollow и он сам автоматически уберёт теги nofollow. Я так в принципе и сделал.

    PS. Мой блог — доффолов.

    Ответить
  7. zmoe

    Супер, перепробовал кучу кодов, только ваш помог, с меня ретвит.

    Ответить