Задача стоит следующая, сделать все не внутренние ссылки на сайте открывающимися в новом окне, а именно добавить атрибут _blank
к внешним ссылкам, к ссылкам ссылающимся на другие сайты/ресурсы! Будем использовать “регулярку” str_replace
…
Давайте откроем файл functions.php расположенный в каталоге нашей темы/шаблона WordPress и в самом низу данного файла, добавим следующие строки:
// внешние ссылки в новом окне function autoblank($text) { $return = str_replace('href=', 'target="_blank" href=', $text); $return = str_replace('target="_blank" href="URL', 'href="URL', $return); $return = str_replace('target="_blank" href="/', 'href="/', $return); $return = str_replace('target="_blank" href="#', 'href="#', $return); $return = str_replace(' target = "_blank">', '>', $return); return $return; } add_filter('the_content', 'autoblank'); add_filter('comment_text', 'autoblank');
Теперь нам останется в двух местах данного кода, вместо URL написать URL вашего сайта – это что бы внутренние ссылки сайта не открывались в новом окне.
В принципе это все, теперь все ссылки добавленные в комментарии или в контент сайта будут открываться в новом окне!
На этом все, всем терпения и удачи в ваших проектах!
добавлено чуток позже
Для тех кто не любит читать комментарии, продублирую более правильное решение предложенное пользователем "Андрей Plechev" и за это Андрею спасибо, а вот и сам код:
function autoblank($text) { $search = array( '<a', 'target="_blank" href="URL', 'target="_blank" href="/', 'target="_blank" href="#', ' target = "_blank">' ); $replace = array( '<a target="_blank"', 'href="URL', 'href="/', 'href="#', '>' ); $string = str_ireplace($search, $replace, $text); return $string; } add_filter('the_content', 'autoblank'); add_filter('comment_text', 'autoblank');
Данный код также размещаем в нашем functions.php и заменяем в нем URL на свой!
супер, только это решение заставляет прогонять одну и ту же функцию несколько раз и не учитывает возможное изменение регистра символов.
Мне кажется лучше сделать так:
http://pastebin.com/j48icpUD
(todo: разобраться со вставкой кода в комментарии)
если есть желание делать несколько замен, то всегда можно передать массив строк и в поиск и в замену, при этом функция будет вызвана только раз.
Вариант!
А как же не открывать внутренние переходы в новом окне, пустые URL ('#','/')...?!
я написал о возможности применения массивов, вот их и можно применять для данной задачи:
http://pastebin.com/Vm4GPs5E
Андрей, только в переменной
$string
я написал такstr_ireplace($search, $replace, $text);
, иначе контент не выводит!верно, ошибка была
Ну велосипед же...
Пусть работает на стороне клиента - http://pastebin.com/wn842kSR на jquery
Источник: совет от Ryan Doom http://stackoverflow.com/questions/7901679/jquery-add-target-blank-for-outgoing-link
Я не совсем дружу с jQuery... 🙁
а это легко если дружить с англоязычным гуглом
А с гуглом я вообще не дружу, я как-то все по Яндексу!
оффтоп конечно, но у яндекса можно спросить погоду. Код, сам лично убедился, ищет гугл лучше.
Сайт stackoverflow, пример с которого я вам привел, так это вообще кладезь
В очередной раз спасибо пользователю "Otshelnik-Fm" за пополнение моей коробочки полезных ресурсов и спасибо "Андрей Plechev" за более правильное решение поставленной задачи!
Пошел править код!
это не значит, что более не ждем новых статей)
Да. Согласен - даже если оттуда переводить и разжевывать для остальных - рунет станет чуточку лучше
Для этого и пишу, что бы учиться делать правильно, так-то по профессии я кондитер, а в кодинге я самоучка! 😮