• ResueltoModerador almendron

    (@almendron)


    Uso desde hace tiempo el plugin «SEO Nofollow External» (https://es.wordpress.org/plugins/seo-nofollow-external/)
    Es muy antiguo pero tan sencillo en su concepción que sigue cumpliendo su cometido sin problemas.

    Solo le he encontrado una pequeña pega que me gustaría resolver. El caso es que el plugin no añade «rel» cuando en la ruta aparece la palabra «release».

    No consigo encontrar el motivo ni mucho menos solucionarlo. Acudo por ello a vosotros. A ver si alguien es capaz de encontrar la solución. Gracias.

    El código del plugin es muy sencillo:

    <?php
    /*
    Plugin Name: SEO Nofollow External
    Plugin URI: http://codeilike.com/nofollow-external
    Description: Automatically add rel="nofollow" and target="_blank" to all external links. To get started, click the "Activate" link to the left of this description.
    Author: Ifty Rahman
    Author URI: http://ifty.info/
    Version: 0.1
    License: GPL version 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
    */
    
    // Make All External Link Nofollow
    add_filter('the_content', 'cil_nofollow_external');
    function cil_nofollow_external($content){
    	return preg_replace_callback('/<a[^>]+/', 'cil_nofollow_callback', $content);
    }
    
    function cil_nofollow_callback($matches){
    	$link = $matches[0];
    	$mu_url = get_bloginfo('url');
    
    	if (strpos($link, 'rel') === false){
    // modificado para add noopener y noreferrer
    //		$link = preg_replace("%(href=\S(?!$mu_url))%i", 'rel="nofollow" $1', $link);
    		$link = preg_replace("%(href=\S(?!$mu_url))%i", 'rel="nofollow noopener noreferrer" $1', $link);
    	}elseif (preg_match("%href=\S(?!$mu_url)%i", $link)){
    // modificado para add noopener y noreferrer
    //		$link = preg_replace('/rel=S(?!nofollow)\S*/i', 'rel="nofollow"', $link);
    		$link = preg_replace('/rel=S(?!nofollow)\S*/i', 'rel="nofollow noopener noreferrer"', $link);
    	}
    	return $link;
    }
    
    // Automatically add target="_blank"
    add_filter('the_content', 'cil_new_tab_link');
    function cil_new_tab_link($content){
    	return preg_replace_callback('/<a[^>]+/', 'cil_target_callback', $content);
    }
    
    function cil_target_callback($matches){
    	$link = $matches[0];
    	$mu_url = get_bloginfo('url');
    
    	if (strpos($link, 'target') === false){
    		$link = preg_replace("%(href=\S(?!$mu_url))%i", 'target="_blank" $1', $link);
    	}elseif (preg_match("%href=\S(?!$mu_url)%i", $link)){
    		$link = preg_replace('/target=S(?!_blank)\S*/i', 'target="_blank"', $link);
    	}
    	return $link;
    }
    ?>
    • Este debate fue modificado hace 7 años por almendron.
Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)
  • Moderador almendron

    (@almendron)

    Si antes lo pongo, antes encuentro la respuesta 🙂

    El fallo está en if (strpos($link, 'rel') === false){ ya que encuentra «rel» en la palabra «release». Para solucionarlo, basta con poner 'rel='.

    Y para «target» hay que hacer lo mismo.

    Moderador almendron

    (@almendron)

    Para dejarlo del todo bien, habría que añadir la opción para que pusiera «noopener» y «noreferrer» cuando ya existiera rel=»rel=»nofollow».
    ¿Alguien se anima a echar una mano?

Viendo 2 respuestas - de la 1 a la 2 (de un total de 2)
  • El debate ‘Problema con URL’ está cerrado a nuevas respuestas.