A-A+

wordpress文章页之外链rel属性优化,替换默认rel=”noopener noreferrer”为rel=”nofollow noopener noreferrer”属性的方法

相信看到这个标题的小伙伴们会有些不解了,noopener noreferrer属性是什么呢?
noopener noreferrer属性就是一种给taraet="_blank"弹出的新窗口的一种安全属性。此属性的意思是告诉搜索引擎,这个链接不是本站链接!此功能是在WordPress中引入的,用于解决可被恶意网站利用的安全漏洞。博主通过了解才发现noopener noreferrer 属性并不是新发布的标准,而是在 WordPress 4.7.4 版开始的编辑器默认都会添加该属性,主要就是用来防范新窗口打开链接时可能存在的钓鱼攻击, 因此WordPress是作为安全性内容自动添加的。

可在实际运用中,这个属性存在的意义并不大。对于想SEO优化wordpress站点的小伙伴来说,给文章当中的外链添加rel="nofollow"属性更实际。

 

 

A:自动添加target="_blank"和rel="nofollow"属性

 

那么问题来了,如何快速的给wordpress文章页当中的外链自动添加target="_blank"和rel="nofollow"属性呢?
其实很简单,只要在wordpress当前使用的主题的"functions.php"文件当中的末尾加上下面代码就可以了:

 

// 自动给文章的外部链接添加target="_blank"和rel="nofollow"属性
add_filter( 'the_content', 'cn_nf_url_parse');
 
function cn_nf_url_parse( $content ) {
 
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>";
 
if(preg_match_all("/$regexp/siU", $content, $matches, PREG_SET_ORDER)) {
 
if( !empty($matches) ) {
 
$srcUrl = get_option('siteurl');
 
for ($i=0; $i < count($matches); $i++)
 
{
 
$tag = $matches[$i][0];
 
$tag2 = $matches[$i][0];
 
$url = $matches[$i][0];
 
$noFollow = '';
 
$pattern = '/target\s*=\s*"\s*_blank\s*"/';
 
preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE);
 
if( count($match) < 1 )
 
$noFollow .= ' target="_blank" ';
 
$pattern = '/rel\s*=\s*"\s*[n|d]ofollow\s*"/';
 
preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE);
 
if( count($match) < 1 )
 
$noFollow .= ' rel="nofollow noopener noreferrer" ';
 
$pos = strpos($url,$srcUrl);
 
if ($pos === false) {
 
$tag = rtrim ($tag,'>');
 
$tag .= $noFollow.'>';
 
$content = str_replace($tag2,$tag,$content);
 
}
 
}
 
}
 
}
 
$content = str_replace(']]>', ']]>', $content);
 
return $content;
 
}

 

 

 

B:通过数据库语句删除原来存在的属性

 

可加上之后,发现了新问题:原来文章当中的外链已经含有rel="noopener"属性的并不会进行替换。

那么,这样的情况要如何解决呢?

其实,也很简单,只要通过SQL语句来批量删除原来文章当中外链已经存在的这个属性就好了。我们需要批量修改的是“wp_posts”表。

代码如下:

UPDATE wp_posts SET post_content = REPLACE( post_content, 'noopener noreferrer', '' )

 

 

 

这样一来,先前发布的文章当中的外链原有的这个属性就会被删除了,就会给新加上自定义的rel="nofollow noopener noreferrer"属性。

 

 

 

 

C:禁用wordpress编辑器默认添加这个属性的功能

 

可是,在发布新文章的时候,wordpress编辑器会默认给文章当中的外链添加rel="noopener noreferrer"属性,那么要如何禁用呢,这个就更简单了,同样要在wordpress当前使用的主题的"functions.php"文件当中的末尾加上下面代码就可以了:

//禁用默认文章页链接当中的rel=“noreferrer”属性
add_filter('tiny_mce_before_init','wpb_disable_noopener');
function wpb_disable_noopener( $mceInit ) {
$mceInit['allow_unsafe_link_target']=true;
return $mceInit;
}

 

 

 

这样一来,这个问题就彻底解决了!是不是很简单?

 

 

 

 

 

给我留言

icon_question icon_razz icon_sad icon_evil icon_exclaim icon_smile icon_redface icon_biggrin icon_surprised icon_eek icon_confused icon_cool icon_lol icon_mad icon_twisted icon_rolleyes icon_wink icon_idea icon_arrow icon_neutral icon_cry icon_mrgreen