网上有些关于自动调整Typecho的cid、mid的php脚本,然而其中使用的mysql方法过于老旧且不支持php7,每次需要手动访问运行很麻烦。本文就上述的脚本进行了修改,使其支持php7且能够在发布文章后自动运行。
1、修改网站根目录下config.inc.php
最后定义数据库部分
/** 定义数据库参数 */
$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、在/admin
目录下新建change-cid.php
文件。因示例中关于页、归档页、分类页、标签页占据了1~4的cid(需要手动进入mysql修改表typecho_contents
中的cid
列),所以本脚本会从表typecho_contents
的第五行开始自动修改文章别名slug为cid-4
,请按照自己的需求在第19-20行进行修改
"4") {
$sql = 'update typecho_contents set slug = ' . ($no - "4") . ' where cid = ' . $no;
mysqli_query($blog,$sql);
}
$sql = 'update typecho_relationships set cid = ' . $no . ' where cid = ' . $cid;
mysqli_query($blog,$sql);
$sql = 'update typecho_comments set cid = ' . $no . ' where cid = ' . $cid;
mysqli_query($blog,$sql);
$no = $no + 1;
}
$query_postRecord = "SELECT cid FROM typecho_contents ORDER BY cid ASC";
$all_postRecord = mysqli_query($blog,$query_postRecord);
$row_postRecord = mysqli_fetch_assoc($all_postRecord);
do {
change_cid( $row_postRecord['cid'] );
} while ($row_postRecord = mysqli_fetch_assoc($all_postRecord));
// 重新设置post id自增起点
mysqli_query($blog,'alter table typecho_contents AUTO_INCREMENT = '.$no);
//echo 'ok'; //测试时使用,正式使用时注释掉
mysqli_close($blog);
?>
3、在/admin
目录下新建change-mid.php
文件
4、修改/admin/manage-posts.php
文件,在原内容前加入如下内容。如果对于分类、标签修改管理较多,可以在/admin/manage-categories.php
和/admin/manage-tags.php
文件前加入相同内容。
文章来源于互联网:Typecho自动修正文章cid、分类标签mid不连续的方法