Typecho 文章内链接在新窗口打开实现方式
默认情况文章中如果有添加链接,那么是从当前窗口跳转的,并且外链没有添加标签,不利于SEO,文章内链接新窗口并添加标签如下。
方法一:修改系统文件
找到 /var//.php 这个文件,在105行,也就是 $attrs['href'] = $this->escape($inline->(''), true); 代码之后添加如下两行代码:
$attrs['target'] = $this->escape(_blank, true);
$attrs['rel'] = $this->escape(nofollow, true);
最后保存查看效果,修改后的完整代码,请注意对比:
case CommonMark_Element_InlineElement::TYPE_LINK:
$attrs['href'] = $this->escape($inline->getAttribute('destination'), true);
$attrs['target'] = $this->escape(_blank, true);
$attrs['rel'] = $this->escape(nofollow, true);
if ($title = $inline->getAttribute('title')) {
$attrs['title'] = $this->escape($title, true);
}
注:如果你是用的 1.0 以上版本请按照下面方法更改:
修改系统代码
找到 .php 这个文件,这里和上面老版本文件不同。
在 self::$parser->hook('', array('', '')); 后面,添加下面代码
self::$parser->hook('afterParseInline', array('Markdown', 'addLinkTargetBlank'));
然后在 public static ($html){} 这个代码块后面,添加下面代码
/**
* addLinkTargetBlank
*
* @param string $html
* @return string
*/
public static function addLinkTargetBlank($html)
{
return preg_replace("//i", "", $html);
}
在前端,通过 JS解决
逻辑是查找某个标签的id下所有的a标签,然后给每个添加属性,如下
var pageAnchors = document.getElementById('post-content').getElementsByTagName('a');
for (var i=0; isrc_add,$options->cdn_add,$obj->content);
}
$obj->content = preg_replace("/content);
echo trim($obj->content);
}
如果需要添加rel=,则如下
function parseContent($obj){
$options = Typecho_Widget::widget('Widget_Options');
if(!empty($options->src_add) && !empty($options->cdn_add)){
$obj->content = str_ireplace($options->src_add,$options->cdn_add,$obj->content);
}
$obj->content = preg_replace("/content);
echo trim($obj->content);
}
该方法的原理就是正则文章的超链接标签,然后加上相应处理即可。使用该方法需要修改主题 post.php 文件,将默认的内容输出 改成 。
方法四、通过修改主题Header.php文件
最近看到一种新的方法是通过修改主题header.php文件在顶部加上即可。
相关文章
- FL Studio21完整版安装包下载FL2023最新版本
- 与(&)、或(|)、异或(^) – 位运算详解
- 基于Wechaty+Docker打造一个ChatGPT机器人
- WordPress主题制作:开始前的准备
- WordPress主题制作(一):主题文件结构
- Docker Portainer – Docker目前最好的可视化管理工具
- classpath和classpath*的区别及classpath到底是什么
- WordPress主题制作(二):模板和模板文件
- Spring AOP详解
- WordPress主题制作(三):牛刀小试
- spring boot 2.x 整合mybaits及分页插件
- spring boot 启动的时候required a bean of type 'XXX' that could not be
- 向maven中央仓库提交jar
- 图解设计模式:动动手玩转迭代器模式
- 青空の霞光Java新特性笔记
- 使用Guava Collections2提供的transform批量转换
- 【tornado】tornado路由系统以及加密cookie在项目中的使用详解
- document.createElement()的用法
- win10电脑开机绕过密码自动登录,微软官方提供修改注册表跳过登录设置方法
- Maven项目报错:The type javax.validation.Payload cannot be resolved. It is indirectly referenced from req