Typecho 实现内容外链新标签打开
演示
站内链接:首页(使用相对路径 /)
站内链接:首页(使用绝对网址 https://blog.0112233.xyz/)
站外链接:百度
我使用的Typecho版本:v1.2.1
实现
在主题的functions.php中加入
function parseContent($obj) {
$options = Typecho_Widget::widget('Widget_Options');
$siteUrl = $options->siteUrl; // 获取站点的基础 URL
// 使用 preg_replace_callback 来检查并修改链接
$obj->content = preg_replace_callback(
'/<a href="([^"]+)">/i', // 匹配所有的 <a href="..."> 标签
function ($matches) use ($siteUrl) {
$url = $matches[1];
// 检查 URL 是否为绝对 URL 或者是否包含站点的基础 URL
if (strpos($url, 'http://') !== 0 && strpos($url, 'https://') !== 0 && strpos($url, $siteUrl) === false) {
// 如果是相对路径并且不含站点 URL,视为站内链接,不添加 target="_blank"
return "<a href=\"$url\">";
} else if (strpos($url, $siteUrl) === false) {
// 如果是绝对路径且不是站内链接,添加 target="_blank"
return "<a href=\"$url\" target=\"_blank\">";
} else {
// 站内链接,不添加 target="_blank"
return "<a href=\"$url\">";
}
},
$obj->content
);
echo trim($obj->content);
}
假设您的主题在展示文章内容时使用了类似这样的代码:
<?php echo $this->content; ?>
您可以将其修改为调用 parseContent 函数:
<?php parseContent($this); ?>
即可实现内部链接当前标签页打开,外部链接新标签页打开。
- 上一篇: 一个免注册、免登陆的免费图床
- 下一篇: 最简单的【个人短网址系统】