Выделение внешних ссылок с помощью php-функции

Все мы уже знаем, что выделение ссылок - достаточно удобная и важная вещь. Я считаю, что выделение внешних ссылок отдельно от внутренних тоже достойно внимания.

Раньше я писал о возможности выделения внешних ссылок посредством CSS3. Но оно имело ряд проблем и ограничений, связанных с тем, что не все браузеры поддерживают CSS3, а также с несовершенностью данного языка.

Теперь вы уже знаете что такое регулярные выражения и как ими пользоваться. Поэтому я предлагаю другой вариант выделения внешних ссылок путем использования небольшой функции, которая будет решать проблемы первого варианта выделения внешних ссылок.

function Select_External($content, $class = 'external'){
 preg_match_all('/<a[^>]+href=["|\']([^\'"]+)["|\'][^>]*>(.+)<\/a>/i', $content, $find, PREG_SET_ORDER);
 foreach( $find as $link ) {
  $link[1] = parse_url($link[1]);
  if ( $link[1][host] && $link[1][host] !== $_SERVER[HTTP_HOST] ) {
   $newlink = ( preg_match('/<a[^>]+class=["|\']([^\'"]+)["|\'][^>]*>(.+)<\/a>/i', $link[0]) ) ?
    preg_replace('/<a([^>]+)class=("|\')([^\'"]+)("|\')([^>]*)>(.+)<\/a>/i', '<a\\1class=\\2\\3 ' . $class . '\\4\\5>\\6</a>', $link[0]) :
    preg_replace('/<a([^>]+)>(.+)<\/a>/i', '<a\\1class="' . $class . '">\\2</a>', $link[0]);
   $content = str_replace($link[0], $newlink, $content);
  }
 }
 return $content;
}

Функция достаточно проста. Всё, что нужно, это задать название стиля, который будет использоваться для внешних ссылок. По умолчанию я задал стиль external, но вы можете изменить его на свой.

Также эту функцию можно прицепить к любой CMS. В нашем случае, чтобы применить её к WordPress, необходимо вышеописанный код добавить в файл functions.php вашей темы. И добавить следующую строчку после данного кода:

add_filter('the_content', 'Select_External');

А о стилях оформления внешних ссылок я говорил, разбирая предыдущий способ. Только теперь можно сделать проще, добавив в файл стилей просто

.external { свойства-стиля }

Вот и всё. Желаю удачи и приятных выходных! 😉

Если вы хотите научиться программировать на web-языках, вам достаточно иметь компьютер, много терпения и желания. Сегодня покупка бу компьютеров обходится очень дешево, а по мощностям их достаточно для требуемых задач.

Недвижимость в Киеве купить несложно, потому как продажа квартир киев там распространена. При этом можно найти как бюджетный вариант, так и шикарные и просторные квартиры.

Вам также будет интересно почитать и следующие записи

2 комментариев

  • Yuriy:

    Но ссылкам то не по умолчанию присваивается класс external — его руками вбивать надо.
    Я так понял, в принципе если немного модифицировать ваш скрипт, можно фильтровать все ссылки и на каждую цеплять external, а потом на него и стиль..
    Но это если надо на все, а не на особенные ссылки..

  • Сергей Фещуков:

    @ Yuriy, только к ссылкам из текста $content будет присвается класс $class, переменная которой содержит по умолчанию значение external. Ну если скрипт переделать, то естественно можно и всю страницу зацепить.

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