0、说明
Typecho的文章cid经常会不连续,看数据库应该是独立页面、附件占用了一部分cid。因此,需要修改数据库或Typecho的源码来解决这个问题。
1、PHP7以下解决方法
1 | <?php $hostname_blog = "localhost"; $database_blog = "数据库名"; $username_blog = "数据库用户名"; $password_blog = "数据库密码"; $blog = mysql_pconnect($hostname_blog, $username_blog, $password_blog) or trigger_error(mysql_error(),E_USER_ERROR); $no = 1; function change_id($cid) { global $no; // 修改post cid,并修改分类、标签、自定义字段、评论的对应关系 $sql = 'update typecho_contents set cid = ' . $no . ' where cid = ' . $cid; mysql_query($sql); $sql = 'update typecho_relationships set cid = ' . $no . ' where cid = ' . $cid; mysql_query($sql); $sql = 'update typecho_comments set cid = ' . $no . ' where cid = ' . $cid; mysql_query($sql); $no = $no + 1; } mysql_select_db($database_blog, $blog); $query_postRecord = "SELECT cid FROM typecho_contents ORDER BY cid ASC"; $all_postRecord = mysql_query($query_postRecord); $row_postRecord = mysql_fetch_assoc($all_postRecord); do { change_id( $row_postRecord['cid'] ); } while ($row_postRecord = mysql_fetch_assoc($all_postRecord)); // 重新设置post id自增起点 mysql_query('alter table typecho_contents AUTO_INCREMENT = ' . $no); echo 'ok'; ?> |
将此php文件上传至Typecho博客根目录,运行一遍即可。
提示:此方法会导致附件不匹配,请酌情使用。
2、PHP7解决方法
2.1、修改配置文件
修改网站根目录下
config.inc.php
约第61至71行为
1 | /** 定义数据库参数 */ $hostname_blog = "数据库连接地址"; $database_blog = "数据库名"; $username_blog = "数据库用户名"; $password_blog = "数据库密码"; $db = new Typecho_Db('Pdo_Mysql', 'typecho_'); $db->addServer(array ( 'host' => $hostname_blog, 'user' => $username_blog, 'password' => $password_blog, 'charset' => 'utf8', 'port' => '3306', 'database' => $database_blog, ), Typecho_Db::READ | Typecho_Db::WRITE); Typecho_Db::set($db); |
2.2、增加排序程序
新建
/admin/change-cid.php
/admin/change-mid.php
分别填入:
此处内容需要评论回复(自动审核)或加入 QQ 技术交流群(立即获得内容)后方可阅读。赞助(二维码在文章下方)后联系作者可一次性解锁所有(包括之后的新文章)。
和
此处内容需要评论回复(自动审核)或加入 QQ 技术交流群(立即获得内容)后方可阅读。赞助(二维码在文章下方)后联系作者可一次性解锁所有(包括之后的新文章)。
2.3、修改文件
在
/admin/manage-posts.php
/admin/manage-categories.php
/admin/manage-tags.php
原内容前加入
1 | <?php require "../config.inc.php"; require "change-cid.php"; require "change-mid.php"; ?> |
3、不修改数据库解决方法
本方法可以不用修改数据库,虚拟主机可以使用。
自定义文章路径,设置自定义文章路径为 wordpress
格式。
修改
/var/Widget/Contents/Post/Edit.php
中,的execute()
函数为:
1 | /** * 执行函数 * * @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'; } } |
即可实现CID严格按照每次+1自增,新文章自动填写。
4、参考文章
Typecho自动修正文章cid、分类标签mid不连续的方法
https://ghostinto.top/archives/22.html
5、注意事项
运行前记得备份数据库!
Typecho文章cid不连续的解决方法
评论