当前位置: 首页 > ai >正文

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

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('wp_targeted_link_rel', 'bzg_targeted_link_rel', 10, 2);

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

UPDATE `wp_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("/[\t\n\r]+/", "", $str));
preg_match_all('/<a.*href="(https?:\/\/(?!\www\.siyege\.com).*".*)>.*<\/a>/Ui', $str, $matchs, PREG_PATTERN_ORDER);
print_r($matchs[1]);

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

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

替换为:

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

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

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

http://www.xdnf.cn/news/20257.html

相关文章:

  • 开源与定制化对比:哪种在线教育系统源码更适合教育培训APP开发?
  • 企业微信智能表格高效使用指南
  • Kafka Exactly-Once 语义深度解析与性能优化实践指南
  • 串口发送数据
  • 如何离线安装 VirtualMachinePlatform
  • 基于STM32单片机的家庭医护血氧体温血压吃药监测APP系统
  • 万字长文详解 MyCat 分表分库:从 0 到 1 构建高可用订单系统
  • 能发弹幕的简单视频网站
  • 计算机网络:调制解调器
  • Docker-volume数据卷
  • 为什么固态硬盘断电后数据还能保存不丢失?
  • 【LeetCode热题100道笔记】二叉树展开为链表
  • 激光频率梳 3D 轮廓测量 - 油路板的凹槽深度和平面度测量
  • Spring核心-Bean周期
  • ElmentUI之DateTimePicker 日期时间选择器
  • 避免使用非const全局变量:C++中的最佳实践 (C++ Core Guidelines)
  • SQLSERVER数据备份
  • Java8 Comparator接口 和 List Steam 排序使用案例
  • 人工智能在医学图像中的应用:从机器学习到深度学习
  • 技术方案详解:如何安全移动已安装软件?
  • C语言精讲(视频教程)
  • 打包 Uniapp
  • Redisson分布式锁:看门狗机制与续期原理
  • nginx安装部署(备忘)
  • ecplise配置maven插件
  • 【知识点讲解】稀疏注意力与LSH技术:从基础到前沿的完整指南
  • MHA高可用架构
  • 多线程(六) ~ 定时器与锁
  • 驱动开发系列71 - GLSL编译器实现 - 指令选择
  • python 逻辑运算练习题