使Typecho文章ID连续

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

设置永久链接格式

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

更改博客源文件

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* 执行函数
*
* @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';
}
}

  到此文章结束,顺便看了下Sitemap地图,也都是定义格式,没什么问题