修正WordPress的ID不连续问题
从WordPress 2.6版开始,wordpress加入了一个让人不舒服的功能,它就是文章版本控制(post revision),这个功能会将一篇日志的每次更新都作为一个版本保存起来,因此新建日志的时候,文章ID就不再是连续的数字了,这个功能对于那些有洁癖的人来说,简直就是眼中钉,除之才能后快。
同时,长期的revision会导致数据库冗余越来越多,直接降低数据库的运行效率。
下面我给大家介绍一下修正这些问题的办法:
一. 首先,需要disable掉revision功能,方法有二:
1. 修改”wp-config.php”文件,加入如下设置:
- define('WP_POST_REVISIONS', false);
2. 很多人说,如上的直接设置是没有用的,还需要安装一个插件,来disable掉自动保存和revision的功能。在这里,我推荐super-switch,安装并激活即可(后台设置里面取消自动保存和revision功能)。
二. 删除冗余的revision信息
如果要手动删除Revisions垃圾信息,请执行如下的sql语句:
- delete from wp_posts where post_type = 'revision';
如果你对数据库操作并不熟悉,可以安装Delete-revision Manager插件,它会帮你自动清除。
三. 将ID重置为连续数字
清除完revision之后,就可以进行重置ID的操作了。
这一步操作有一定的风险,因为ID重置以后,如果您是使用ID作为永久链接的标识,搜索引擎就需要重新抓取你的网站,而以前的索引就有可能全部失效(或进入不相应的页面)。
在这里,我自己写了一个小脚本来对数据库进行刷新,代码如下:
- <?php
- //connect to the database
- mysql_connect("host","user","password");
- mysql_select_db("db_name");
- $sql = "select ID from wp_posts order by post_date asc;";
- $result = mysql_query($sql) or die($sql);
- $original_id = 100001;//重设初始ID,避免和已有ID冲突
- while($row = mysql_fetch_array($result))
- {
- //echo $row["ID"]."_".$original_id."<br />";
- //change the ID for post/comments/category/etc
- $sql = "update wp_posts set id = ".$original_id." where id = ".$row["ID"].";";
- mysql_query($sql);
- $sql = "update wp_term_relationships set object_id = ".$original_id." where object_id = ".$row["ID"].";";
- mysql_query($sql) or die(mysql_error());
- $sql = "update wp_postmeta set post_id = ".$original_id." where post_id = ".$row["ID"].";";
- mysql_query($sql);
- $sql = "update wp_comments set comment_post_ID = ".$original_id." where comment_post_ID = ".$row["ID"].";";
- mysql_query($sql);
- $original_id++;
- }
- ?>
经过以上几步操作,我的wordpress已经完全屏蔽了revision功能,并且文章ID从100001开始自增长。
有的朋友可能会问,为什么要从100001开始,而不是1呢?
因为在刷新数据库的过程中,有可能出现重置ID与已有ID冲突的情况,从而发生数据库无法刷新的问题,因此我重新对文章ID进行编码,选择了从100001起步。当然,如果您的ID数超过了10w,就需要更大的编码规则。

不同的blog转换就是很麻烦的。。
三. 将ID重置为连续数字
这步怎么操作?不是SQL语句!
要放在哪里
太感谢了 非常好用 终于把这个问题解决了
我运行了两边 第一次是10001开始 这样都在1W以上
然后把10001改成1 这样就全部从1开始了