Typecho默认支持Markdown语法,但是Markdown的a标签默认是在当前页跳转链接,网上有修改链接跳转改为新窗口的教程,但是不够完美,于是自己写了个正则。

网上的办法会使所有链接都在新窗口跳转,并且会清除掉a标签的其他属性或者有漏网的a标签,而我希望做到属于本站的链接不要打开新窗口,只有外链接才新窗口打开,且不要改变a标签的当前属性,只添加新窗口跳转这个属性,且不要漏网。

修改方法

functions.php内搜索关键词function themeInit

如果有themeInit这个函数,则在themeInit这个函数内添加下面的代码

if ($archive->is('single')) {
    $archive->content = preg_replace('/<a\b([^>]+?)\bhref="((?!'.addcslashes($options->index, '/._-+=#?&').'|\#).*?)"([^>]*?)>/i', '<a\1href="\2"\3 target="_blank">', $archive->content);
}

如果没有themeInit这个函数,则在functions.php最后一行之前添加下面的代码

function themeInit($archive) {
    if ($archive->is('single')) {
        $archive->content = preg_replace('/<a\b([^>]+?)\bhref="((?!'.addcslashes($options->index, '/._-+=#?&').'|\#).*?)"([^>]*?)>/i', '<a\1href="\2"\3 target="_blank">', $archive->content);
    }
}

打完收功,在前台查看效果就行。

如果发现问题,欢迎反馈😁