Typecho 中文章和评论的链接改为新窗口打开
...大约 2 分钟
之前一直没注意这个事情,今天一看文章中的链接和评论中的链接点击都是从本窗口跳转,这怎么能行,这流量流失的也太具体了吧,在网上查询之后找到办法——修改 Typecho
源码
本文针对的是 版本 1.1 (17.10.30)
,而网上的大多答案都是 0.x
版本的 Typecho
,其实都是改源码的方式,只不过 1.1 版本的目录结构和旧版的 不同而已
PS:本文路径中的 /var
是相对于 Typecho
的安装目录的,不是服务器上的 var
目录哦
评论中的链接
大约在 /var/Widget/Abstract/Comments.php
文件中 376 行左右的位置(我是直接在文件中搜索 href
,第一个就是),将代码
echo '<a href="' , $this->url , '"' , ($noFollow ? ' rel="external nofollow"' : NULL) , '>' , $this- author , '</a>';
修改为
echo '<a href="' , $this->url , '"' , ($noFollow ? ' rel="external nofollow"' : NULL) , 'target="_blank">' , $this->author , '</a>';
文章中的链接
这个的源码我找了一晚上才找到,可能的文件都翻过了,怪我 php
太菜了,只能通过搜索 href
来进行查找,效率实在是太低了。
大约在 /var/HyperDown.php
文件中 386 行左右的位置有这样一段代码,这是我已经将 target='_blank'
加进去之后的代码了,一样的代码就不多复制了,咱也不知道这代码具体的作用,个人从大致的文件相关来理解这应该是 Typecho
采用的 MD
解析器的源码,我相当于修改了其中对于 link
解析的一丢丢规则,反正这样是可以达成我的目的的,嘻嘻
// link
$text = preg_replace_callback(
"/\[((?:[^\]]|\\\\\]|\\\\\[)+?)\]\(((?:[^\)]|\\\\\)|\\\\\()+?)\)/",
function ($matches) use ($self) {
$escaped = $self->parseInline(
$self->escapeBracket($matches[1]), '', false, false
);
$url = $self->escapeBracket($matches[2]);
$url = $self->cleanUrl($url);
return $self->makeHolder("<a href=\"{$url}\" target='_blank' >{$escaped}</a>");
},
$text
);