Помогите написать код вывода ссылки

K
На сайте с 10.01.2015
Offline
110
908

Всем доброго времени суток!

Имеют сайт на WordPress, в котором ссылки в комментариях неактивны для нажатия. Сама ссылка подсвечивается синим, но перейти по ней по клику нельзя.

Вот полный код функции:

function _make_url_clickable_cb($matches) {
$url = $matches[2];

if ( ')' == $matches[3] && strpos( $url, '(' ) ) {
// If the trailing character is a closing parethesis, and the URL has an opening parenthesis in it, add the closing parenthesis to the URL.
// Then we can let the parenthesis balancer do its thing below.
$url .= $matches[3];
$suffix = '';
} else {
$suffix = $matches[3];
}

// Include parentheses in the URL only if paired
while ( substr_count( $url, '(' ) < substr_count( $url, ')' ) ) {
$suffix = strrchr( $url, ')' ) . $suffix;
$url = substr( $url, 0, strrpos( $url, ')' ) );
}

$url = esc_url($url);
if ( empty($url) )
return $matches[0];

return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $suffix;
}

Вот код, который отвечает за ее вывод:

return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $suffix;

Выводимая с помощью него ссылка выглядит вот так:

<a rel="nofollow">https://twitter.com/</a>

Прошу помочь ссылку кликабельной, то есть придать ее нормальный вид:

<a href="https://twitter.com/" target="_blank">https://twitter.com/</a>
дани мапов
На сайте с 06.09.2012
Offline
204
#1

Там переменная $url и анкор и адрес ссылки. Как может в анкоре выводить "https://twitter.com", а в адресе нет? Неточно скопировали код скорее всего.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
K
На сайте с 10.01.2015
Offline
110
#2

Скопировал верно, твиттер взял для примера.

Например https://twitter.ru (сейчас он кликабельный, и при этом текст выглядит как ссылка)

vandamme
На сайте с 30.11.2008
Offline
675
#3
Kepus:
Вот код, который отвечает за ее вывод:
Код:

return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $suffix;

Выводимая с помощью него ссылка выглядит вот так:
Код:

<a rel="nofollow">https://twitter.com/</a>

а куда же тогда пропал этот участок кода из последней строки вашего скрипта в той ссылке которая сейчас выводится?

<a href=
K
На сайте с 10.01.2015
Offline
110
#4

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

Если я бы знал почему она меняется, то сам бы решил эту проблему.

U
На сайте с 09.04.2015
Offline
28
#5

Похоже, что-то вырезает

href="..."
после выполнения этой функции. Поищите preg_replace
K
На сайте с 10.01.2015
Offline
110
#6

Через примерно 100 строк после нее есть такой код с описанной ваши штуковиной:

			$ret = preg_replace_callback( $url_clickable, '_make_url_clickable_cb', $ret );

$ret = preg_replace_callback( '#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]+)#is', '_make_web_ftp_clickable_cb', $ret );
$ret = preg_replace_callback( '#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret );

$ret = substr( $ret, 1, -1 ); // Remove our whitespace padding.
$r .= $ret;
}
}

// Cleanup of accidental links within links
$r = preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r );
return $r;
}


---------- Добавлено 13.12.2015 в 23:30 ----------

Вот ссылка на полный файл, который отвечает за то, что мне нужно.

https://yadi.sk/d/E_iBU1kpmCTvc

U
На сайте с 09.04.2015
Offline
28
#7

Kepus, закомментируйте строку

$r = preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r );
и посмотрите, что будет в коде страницы. У Вас ссылка в ссылке должна получиться
K
На сайте с 10.01.2015
Offline
110
#8
umercomp:
Kepus, закомментируйте строку
$r = preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r );
и посмотрите, что будет в коде страницы. У Вас ссылка в ссылке должна получиться

Нет, ничего ровным счетом не изменилось, совсем.

U
На сайте с 09.04.2015
Offline
28
#9

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

<a href="/">Главная относительная</a>

<a href="http://site.ru/">Главная абсолютная</a>
и еще вот так
<a href="//site.ru/">Главная по текущему протоколу</a>

Останется хоть что-то?

K
На сайте с 10.01.2015
Offline
110
#10

Сейчас сделал замену строки

return $matches[1] . "<a href=\"$url\" rel=\"nofollow\" target=\"_blank\">$url</a>" . $suffix;

на

return $matches[1] . "<div href=\"$url\" rel=\"nofollow\" target=\"_blank\">$url</div>" . $suffix;

ссылка с точки зрения исходного кода стала сразу же нормально выглядеть, но из-за div не работает разумеется.

---------- Добавлено 14.12.2015 в 02:11 ----------

Вот еще, что удалось выяснить. Если удалить:

 rel=\"nofollow\"

То получается, что ссылка выводится как

<a>https://twitter.com/</a>


---------- Добавлено 14.12.2015 в 03:09 ----------

Разобрался. Проблемой был один из плагинов для маскировки ссылок.

Пользуясь случаем хочу спросить, если ссылка в комментариях помечена таким атрибутом

<a href="http://www.yandex.ru" rel="nofollow">http://www.yandex.ru</a>

Вес моего сайта не будет уходить на нее?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий