昨天有个朋友问我,Typecho 的文章链接能不能变成跳转外链。一开始他提出这个问题我也感到很奇葩,经过他的详细说明,主要是因为他曾经在熊掌号发过一次,就不想在自己博客反复发了,所以想把文章链接直接跳转过去。这个问题有两个解决方案,一个是直接在文章里面加上 JavaScript 代码实现跳转(体验略差),或是修改 Typecho 的模板,识别特定字段,直接把链接显示在网页里面,实现点击直达。

插入 JS 方法

这个方法非常简单,你只需要在对应的文章里面编写这段内容:

<script>window.location.href = "https://paul.ren"</script>

即可从文章页面直接跳转到 https://paul.ren 这个网站。因 Typecho 不同版本存在差异,如果这样设置之后访问文章这段内容显示成文字了,请在代码前后各增加一行,输入三个 ! 符号即可

修改模板方法

这个需要修改你模板的代码,相对于上面的方法,他需要更改 PHP 输出的内容,所以难度也相对更高,建议有 PHP 相关经验者尝试。

首先打开 Typecho 的后台,找到左上角的菜单,点击 控制台 > 外观 > 编辑当前外观 在右侧的列表里找到 index.php 文件。

模板一般会出现 <?php while($this -> next()): ?> 这样的代码,我们需要编辑的就是这段区域。这里我们将由 Single 主题为例:

<?php while($this -> next()): ?> 
    <div class="post-item">
        <h2>
            <a href="<?php $this -> permalink() ?>"><?php $this -> title() ?></a>
            <?php if($this -> authorId == $this -> user -> uid): ?> <a class="edit-link" href="<?php $this -> options -> adminUrl(); ?>write-post.php?cid=<?php echo $this->cid;?>" target="_blank">编辑</a><?php endif; ?>
        </h2>
        <p><?php $this -> excerpt(100); ?></p>
        <div class="post-meta">
           ...
        </div>
    </div>
<?php endwhile; ?>

我们找到 <?php $this -> permalink() ?> 这段用于输出链接的函数,将它替换为:

<?php
    if($this -> fields -> customLink){
        $this -> fields -> customLink();
    }
    else{
        $this -> permalink();
    }
?>

然后在你写文章的时候展开文章编辑器下方的 自定义字段 面板,添加一个名为 customLink 的字段,填入你要跳转的链接就可以啦!

这样,这篇文章的链接在首页里点击就自动跳转到 https://paul.ren 了。如果还需要改的更细致,可以参照上面的方法一并修改 archive.php 文件,这个是在筛选分类、日期下的文章展示页面。