Cómo agregar rel = "nofollow" a enlaces con preg_replace ()
a función a continuación está diseñada para aplicarrel="nofollow"
atribuye a todos los enlaces externos y no a enlaces internos a menos que la ruta coincida con una URL raíz predefinida definida como$my_folder
abajo.
Así que dadas las variables ...
$my_folder = 'http://localhost/mytest/go/';
$blog_url = 'http://localhost/mytest';
Y el contenido ...
<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>
El resultado final, después del reemplazo debe ser ...
<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>
Observe que el primer enlace no se modifica, ya que es un enlace interno.
El enlace en la segunda línea también es un enlace interno, pero como coincide con nuestro$my_folder
string, obtiene elnofollow
también
l tercer enlace es el más fácil, ya que no coincide con elblog_url
, obviamente es un enlace externo.
Sin embargo, en el script a continuación, TODOS mis enlaces recibennofollow
. ¿Cómo puedo arreglar el script para hacer lo que quiero?
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;
}