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
);
评论
  • 按正序
  • 按倒序
  • 按热度