Функция ниже предназначена для применения атрибутов rel="nofollow"
ко всем внешним ссылкам и без внутренних ссылок, если путь не соответствует предварительно определенному корневому URL-адресу, определенному ниже как $my_folder
.
Итак, учитывая переменные ...
$my_folder = 'http://localhost/mytest/go/';
$blog_url = 'http://localhost/mytest';
И содержание ...
<a href="http://localhost/mytest/">internal</a>
<a href="http://localhost/mytest/go/hostgator">internal cloaked link</a>
<a href="http://cnn.com">external</a>
Конечный результат после замены должен быть ...
<a href="http://localhost/mytest/">internal</a>
<a href="http://localhost/mytest/go/hostgator" rel="nofollow">internal cloaked link</a>
<a href="http://cnn.com" rel="nofollow">external</a>
Обратите внимание, что первая ссылкане изменяется, поскольку это внутренняя ссылка.
Ссылка во второй строке также является внутренней ссылкой, но, поскольку она соответствует нашей строке $my_folder
, она также получает nofollow
.
Третья ссылка самая простая, поскольку она не соответствует blog_url
, это, очевидно, внешняя ссылка.
Однако в приведенном ниже сценарии ВСЕ мои ссылки получают nofollow
.Как я могу исправить скрипт, чтобы делать то, что я хочу?
function save_rseo_nofollow($content) {
$my_folder = $rseo['nofollow_folder'];
$blog_url = get_bloginfo('url');
preg_match_all('~<a.*>~isU',$content["post_content"],$matches);
for ( $i = 0; $i <= sizeof($matches[0]); $i++){
if ( !preg_match( '~nofollow~is',$matches[0][$i])
&& (preg_match('~' . $my_folder . '~', $matches[0][$i])
|| !preg_match( '~'.$blog_url.'~',$matches[0][$i]))){
$result = trim($matches[0][$i],">");
$result .= ' rel="nofollow">';
$content["post_content"] = str_replace($matches[0][$i], $result, $content["post_content"]);
}
}
return $content;
}