欢迎光临
我们一直在努力

WordPress过滤文章插入链接rel属性noopener noreferrer值

在保存文章的时候,WordPress会自动过滤文章内容中的链接,具有target属性的链接会自动添加rel=”noopener noreferrer”,该属性是为了预防跨站攻击,站内链接似乎没有必要添加,但我习惯站内链接也设置target属性。

将以下代码复制到主题文件functions.php

function bzg_targeted_link_rel($rel, $link_html) {  	$site_url = parse_url(site_url());  	preg_match('/href=['"](https?://.*)['"]/i', $link_html, $matchs);  	if(empty($matchs[1])) return '';  	$target_url = parse_url($matchs[1]);  	  	if($target_url['host'] == $site_url['host']) {  		return '';  	}  	return $rel;  }  add_filter('wpone_targeted_link_rel', 'bzg_targeted_link_rel', 10, 2);

此时,保存文章不会对站内链接添加rel属性了,对于之前已经发表的文章,需要在数据库修改(操作前先备份一下数据库):

UPDATE `wpone_posts` SET `post_content` = replace (`post_content`,' rel="noopener noreferrer"','') WHERE `post_content` LIKE '% rel="noopener noreferrer"%'

这条SQL语句会替换掉所有链接中的rel属性,包括站外链接,但站外链接应该添加上rel属性,可以使用下面的正则表达式把站外链接提取出来:

$str = file_get_contents('beizigen.sql');  $str = stripslashes(preg_replace("/[tnr]+/", "", $str));  preg_match_all('/<a.*href="(https?://(?!www.beizigen.com).*".*)>.*</a>/Ui', $str, $matchs, PREG_PATTERN_ORDER);  print_r($matchs[1]);

事实上我在执行SQL语句时没有考虑到站外链接的情况而走了弯路,如果直接使用Notepad++之类的文本编辑器正则表达式替换,就不需要SQL语句替换和手动检索站外链接了。

查找正则表达式如下:

<a.*?href=\"(https?://www.beizigen.com.*?)\".*?>

替换为:

<a href=\"1\" target=\"_blank\">

建议单独替换wpone_posts表,可以在phpMyAdmin中只导出wpone_posts表进行替换,为了安全起见,操作前先备份好数据。

附:之前对noopener noreferrer不太了解,担心影响SEO,研究之后发现对具有target属性的链接添加noopener noreferrer还是有必要的,看来白折腾了。



微信扫描下方的二维码阅读本文

未经允许不得转载:小智Blog » WordPress过滤文章插入链接rel属性noopener noreferrer值
分享到: 生成海报
智宇腾文化blog

热门推荐

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活