Нижеприведенная функция предназначена для применения атрибутов rel="nofollow"
ко всем внешним ссылкам и внутренних ссылок, если только путь не соответствует предварительно определенному корневому URL, указанному ниже $my_folder
.
Итак, заданные переменные...
$my_folder = 'http://localhost/mytest/go/';
$blog_url = 'http://localhost/mytest';
И содержимое...
<a href="#" onclick="location.href='http://localhost/mytest/'; return false;">internal</a>
<a href="#" onclick="location.href='http://localhost/mytest/go/hostgator'; return false;">internal cloaked link</a>
<a href="#" onclick="location.href='http://cnn.com'; return false;">external</a>
Конечный результат, после замены должен быть...
<a href="#" onclick="location.href='http://localhost/mytest/'; return false;">internal</a>
<a href="#" onclick="location.href='http://localhost/mytest/go/hostgator'; return false;" rel="nofollow">internal cloaked link</a>
<a href="#" onclick="location.href='http://cnn.com'; return false;" rel="nofollow">external</a>
Обратите внимание, что первая ссылка не изменяется, так как ее внутренняя ссылка.
Ссылка на вторую строку также является внутренней ссылкой, но поскольку она соответствует нашей строке $my_folder
, она также получает nofollow
.
Третья ссылка самая простая, так как она не соответствует blog_url
, ее явно внешняя ссылка.
Однако в script ниже ВСЕ мои ссылки получают nofollow
. Как я могу исправить script делать то, что хочу?
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;
}