使Typecho文章ID连续

 最近站点又恢复了,文章和评论也从旧站点导入这个站点了。WordPress的文章ID有个特点,就是ID几乎很难连续。据我所知,WordPress的ID号不仅要分配给文章,还要分配给文章草稿,分类等等,这就导致文章导入Typecho后,Typecho文章的Cid也不连续,这就很不符合强迫症的我,于是从官方GitHub库的Issues中,看到有人这样解决。
不修改文章Cid,通过修改固定链接方式,使用Slug来代替Url中Cid位置,举个例子:

  • 第一篇文章Cid为”1”,固定链接方式设置为”个性化定义 /{cid}.html”,则Url链接为https://blog.catchyun.com/1.html
  • 第二篇文章Cid为”11”,固定链接方式设置为”个性化定义 /{cid}.html”,则Url链接为https://blog.catchyun.com/11.html
  • 但是如果你想让Cid为”11”的第二篇文章Url链接为https://blog.catchyun.com/2.html的话,那需要从数据库修改Cid的值,并且需要将关联的"评论"和"自定义字段"Cid也更改
      下面就介绍一种不需要更改数据库的方法,通过从后台修改”Slug”值,来实现上述Url形式。(有个缺点,如果你文章很多,那需要后台一个一个改Slug,但是以后就会自动连续生成Slug,也可自定义修改)

设置永久链接格式

  • 路径:后台 —> 设置 —> 永久链接
  • 1.1 启用地址重写功能
  • 1.2 更改自定义文章路径
    选择WordPress风格,也可自定义为/{slug}.html,这样就不会显示”archives”字段
  • 1.3 打开Nginx设置
    博主使用的是宝塔面板管理,打开 站点设置 —> 伪静态 —> 选择typecho方案
if (!-e $request_filename) {
    rewrite ^(.*)$ /index.php$1 last;
}
  • 1.4 返回站点后台设置保存,如果显示未设置伪静态,选择仍要更改即可。

更改博客源文件

为了使创建新文章时,自动递增Slug的值,则需将博客框架文件稍作修改。
编辑文件 {安装路径}/var/Widget/Contents/Post/Edit.php,修改该文件的 execute()函数,新增else分支

/**
 * 执行函数
 *
 * @throws Exception|DbException
 */
public function execute()
{
    /** 必须为贡献者以上权限 */
    $this->user->pass('contributor');

    /** 获取文章内容 */
    if (!empty($this->request->cid)) {
         // .......
    }
    else {    //  <--------------- 新增 else 分支
        /* 获取文章下一个(连续)自增的slug */
        $this->slug = $this->getNextPostSlug();
        $select = $this->db->select('MAX(slug + 0) AS slug_max')
            ->from('table.contents')
            ->where('table.contents.type = \'post\'');
        //echo $select->__toString();
        $res = $this->db->fetchRow($select);
        $slug_max = $res['slug_max'];
        $this->slug = $slug_max ? (string)(intval($slug_max) + 1) : '1';
    }
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共9条

请登录后发表评论

    • 头像TeacherDu0
    • 头像龙鲲0
    • 头像2312310