相信看到这个标题的小伙伴们会有些不解了,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;
}
这样一来,这个问题就彻底解决了!是不是很简单?
评论