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;
}

Respuestas a la pregunta(7)

Su respuesta a la pregunta