最近站点又恢复了,文章和评论也从旧站点导入这个站点了。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
- 最新
- 最热
只看作者