使用Wordpress,尤其从3.0走入Wordpress世界的朋友,也许都遇到过一个问题:自动保存(Auto-Save)和文章修订(Post-Revisioning)功能导致文章ID不连续的问题。有时还特别夸张。例如,我的“‘地瓜哥’博客网”,第一篇文章是1,第二篇文章已经一下子跳到了19。这样对于像D瓜哥这样的“ID洁癖”的人来说,实在很不爽!经过D瓜哥的多次尝试后,终于很彻底地解决了这个问题。并且,还可以把以前被自动备份的ID重新利用起来!

去掉自动草稿的功能

造成发布文章ID不连续的原因有三:

自动保存功能 Auto-Save;

历史版本 Post Revisions;

自动草稿功能 Auto-Draft!

针对WordPress 3.4.x,这里给大家介绍一个解决ID不连续发方法:

打开%WP%/wp-config.php文件,在 “$table_prefix = ‘wp_’;” 前面添加如下代码(注意,一定是”$table_prefix = ‘wp_’;”这行的前面):

define('WP_POST_REVISIONS', false);

define('AUTOSAVE_INTERVAL', false);

找到并打开%WP%/wp-admin/post-new.php 和%WP%/wp-admin/post.php 这两个文件,将其 “wp_enqueue_script(‘autosave’);” 注释或删除掉。如下:

//wp_enqueue_script('autosave');

经过上面的修改后,文章的自动保存和历史版本都关闭了。不过,这里也带来了一个副作用:预览不能使用了,需要手动保存草稿后才行。美中不足吧。

另外,还有个自动草稿功能,我们下面会介绍如何处理。

在这里D瓜哥要纠正一个曾经犯的错误。D瓜哥在“关闭WordPress自动保存和文章修订功能”中提到了一种方法,但是经过D瓜哥的使用经验来看,这种方式不好使!请大家停止使用。

删除无用的草稿

在“删除草稿”方面,有一些相应的插件,比如Delete-Revision,但是给Wordpress安装过多的插件会降低她的速度。所以,D瓜哥尽量少安装插件,如果通过简单的代码修改就能解决问题,就尽量修改代码。另外,由于“删除草稿”这样的操作,也许只需要操作一次,而且只需要简单的SQL。所以,D瓜哥认为必要安装插件。这次,我们就通过编码来完成我们的工作。

注意,请在进行如下工作前,备份数据库!防止把数据搞坏。

我们先来看一下冗余数据(无用的自动修订、草稿等)。登陆phpMyAdmin(一般虚拟主机都会提供的),然后选中相应的数据库,然后在里面执行如下SQL:

-- 查看自动修订产生的冗余数据

-- 注意,请根据自己的情况,修改表名(主要是表前缀)

SELECT * FROM `wp_posts` WHERE `post_type` = 'revision';

这里显示内容都是一些冗余的数据,可以直接删除。删除SQL如下:

-- 删除冗余数据

DELETE FROM `wp_posts` WHERE `post_type` = 'revision';

另外,需要给大家提醒一点。在D瓜哥查找删除冗余数据的资料中,见到过如下的写法:

DELETE FROM `wp_posts` WHERE `post_status` != 'publish' OR `post_type` = 'revision';

经过D瓜哥对实际数据的观察发现,这个SQL是不对的。它会把上传的图片等信息删除掉。所以,请大家注意!!

经过这次清理后,数据库干净了许多。同时,也在表中的ID不再连续,还空出来好多没被用掉的ID数。那么,我们该如何重用这些被空出来的ID呢?

重用被浪费掉的ID

根据D瓜哥的个人经验,Wordpress会每隔一段时间,自动在wp_posts表中添加一条草稿记录。并且,对于用户来说是不可见的。这也是一种浪费。浪费的还有上一节被删掉后空出来的ID。所以,有必要想办法重新这些被浪费掉的ID。

重用自动草稿产生的ID

既然,Wordpress能产生不可见的草稿记录。那么,我们修改一下代码,在添加文章的时候,把自动产生的草稿记录读取出来,重新添加文章内容即可。下面,D瓜哥给大家介绍一下方法:

打开%WP%/wp-admin/includes/post.php文件,将如下内容(Wordpress 3.4.2):

// 原始Wordpress代码

if ( $create_in_db ) {

$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );

$post = get_post( $post_id );

if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )

set_post_format( $post, get_option( 'default_post_format' ) );

} else {

替换为如下内容:

// 替换后,可以重用自动草稿

if ( $create_in_db ) {

global $current_user; // 获取当前登录管理用户

$post = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY post_date ASC, ID ASC LIMIT 1" ); // 获取最早一条自动草稿

if ( !$post ) {

$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );

$post = get_post( $post_id );

}

if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )

set_post_format( $post, get_option( 'default_post_format' ) );

} else {

请注意上面代码中使用的SQL语句:

SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY post_date ASC, ID ASC LIMIT 1

这里,之所以使用post_date排序,是因为自动草稿超过七天后会自动删除。所以,先使用比较旧的记录。可能,你会问,那不是有ID在排序吗?这个问题,我们在下一小节再解释。

生成添加“草稿”的数据

经过上面的折腾,空出来一些ID。既然自动草稿的记录能使用,那么空出来的ID更加可以随意使用。现在,我们就想办法把这些空出来的ID也使用起来。

根据网友测试结果显示,经过修改上面的代码修改后,只要手动保持wp_posts表中数据的三个字段内容如下,那么这些空出来的ID也可以被使用起来。

post_status='auto-draft'

guid='http://youdomain/?p={$ID}'

post_type='post'

// ID不能为空,还有和{$ID}保持一致;

ID

// post_author字段也要填上相应作者的ID。

post_author

将空出来的ID分别安装上面的要求,将对应一列数据造出来即可。我们上面提到,Wordpress会自动添加自动草稿的记录,并且七天后就自动删除。那么,我们要在两个时间相关的字段post_date和post_modified上,填上一个尽可能打一点的值,防止Wordpress自动删除。但是,系统还有可能产生自动草稿。那么,为了防止被删除,系统产生的这些自动草稿记录要优先使用掉。所以,我们上面的SQL中,有按照时间排序的条件。

既然有了上面这些要求,那么我们就写一个SQL语句,来自动生成数据。SQL如下:

-- 生成100以内的空ID对应的记录

CREATE TABLE post_bk as

SELECT iid AS ID,

'auto-draft' as post_status,

CONCAT('http://www.diguage.com/?p=', iid) AS guid,

'post' AS post_type,

1 as post_author,

str_to_date('11.25.2015 00:00:00',

'%m.%d.%Y %H:%i:%s') as post_date,

str_to_date('03.26.2015 21:44:00',

'%m.%d.%Y %H:%i:%s') as post_modified

from ( select b.dd * 10 + a.dd as iid

from ( select 1 as dd

union all select 2

union all select 3

union all select 4

union all select 0

union all select 5

union all select 6

union all select 7

union all select 8

union all select 9) a,

(select 0 as dd

union all select 1

union all select 2

union all select 3

union all select 4

union all select 5

union all select 6

union all select 7

union all select 8

union all select 9) b

) num

WHERE iid > 0 and iid NOT IN

( SELECT ID from wp_posts )

ORDER BY iid ASC;

这个SQL语句只能生成100以内的空ID的记录;另外,这里制造100以内的整数时,有点麻烦,可以考虑直接用编程语言生成以逗号分隔的数字序列。

这个生成工作最好在本地进行。生成完后,使用phpMyAdmin将生成出来的post_bk表的数据都导出成脚本,然后登陆服务器上的phpMyAdmin,将脚本导入到服务器上的表中。

这里,给大家展示两条我导出出来的数据。需要的话,直接拷贝使用:

-- 添加空白记录对应,重用ID

INSERT INTO `wp_posts` (`ID`, `post_status`, `guid`, `post_type`, `post_author`, `post_date`, `post_modified`) VALUES(3, 'auto-draft', 'http://www.diguage.com/?p=3', 'post', 1, '2015-11-25 00:00:00', '2015-03-26 21:44:00');

INSERT INTO `wp_posts` (`ID`, `post_status`, `guid`, `post_type`, `post_author`, `post_date`, `post_modified`) VALUES(4, 'auto-draft', 'http://www.diguage.com/?p=4', 'post', 1, '2015-11-25 00:00:00', '2015-03-26 21:44:00');

参考资料

如何id变动自动保存html软件,Wordpress折腾小记:彻底解决ID不连续的问题-自动保存、自动修订 | 地瓜哥博客网...相关推荐

  1. 自动图片拼贴制作软件:CollageIt Pro绿色便携版_拔剑-浆糊的传说_新浪博客

    http://www.portablesoft.org/collageit/ 自动图片拼贴制作软件:CollageIt Pro绿色便携版 CollageIt是一个非常简便的图片拼贴制作软件,只要导入图 ...

  2. 安卓自动滑屏脚本_手机自动滑屏软件下载-安卓手机自动滑屏(Auto.js)下载v4.1.1 安卓免root版-西西软件下载...

    安卓手机自动滑屏软件一款全新功能强大的手机应用脚本,可以更好的实现上下滑屏幕助手,免root屏幕自动滑动,编写软件.游戏脚本等一站式服务功能,需要的朋友快来下载体验吧! 安卓手机自动滑屏是什么软件 手 ...

  3. 全球与中国自动车牌识别软件行业市场调研及发展趋势预测报告

    车牌自动识别软件利用车牌区域的纹理特征来定位车牌.常用的车牌检测算法包括:利用梯度信息的投影统计:小波变换用于分割:车牌区域扫描连接算法:利用区域特征训练分类器的方法等.这些算法各有优缺点,如何从复杂 ...

  4. 软件测试作业8:分析自动售货机软件例子生成的判定表图例

    作业8 1.分析 Chap.5 (Lec.19) 自动售货机软件例子生成的判定表图例的第6列和第23列,分别给出: (1).输入条件的自然语义陈述: (2).输出结果的自然语义陈述: (3).用命题逻 ...

  5. 电脑自动安装垃圾软件怎么办?拒绝重装系统,教你一招搞定!

    相信读到这篇文章的你也遭遇了和我一样的痛苦,我非常理解,希望我的这个方法能解决你的问题.我使用了各种杀毒软件,各种管家,各种安全卫士,各种系统急救箱,电脑安全模式下查杀病毒,手动卸载各种疑似木马病毒等 ...

  6. WordPress+Markdown+为知笔记,实现高质量笔记和博客

    本文写给:和我一样想要有一套操作容易.使用方便.兼容性好的 高质量个人知识管理和博客 实现方案的人. 欢迎通过此链接注册为知笔记来支持本人:https://note.wiz.cn/i/1fe81312 ...

  7. 在阿里云服务器(Ubuntu系统)下使用WordPress搭建博客网站教程

    最近着手也搭建了一个自己的博客网站,在这里与大家分享一下搭建的过程和遇见的问题,希望对同学们有所帮助. 环境:阿里云服务器(Ubuntu系统) 提醒:申请阿里云服务器,可以到阿里云官网领取阿里云幸运券 ...

  8. 博客备份工具BlogDown 软件使用感想

    最近在找博客备份相关的工具,看到了一个不错的博客备份工具BlogDown.使用博客备份BlogDown工具是可以制作博客电子书的.他支持导出多种文件格式,包括常用的电子书格式chm,还有word格式d ...

  9. 接口应用小玩具-博客园积分排名变动监控工具

    小玩具-博客园积分排名变动监控工具 一个简单的在线服务监控和提醒工具 1   概述 前段时间自己准备重新开启自己的博客园,然后还和一些圈子里面的朋友夸下海口,自己要开始像打游戏那样,进行博客园的 天梯 ...

最新文章

  1. Linux真随机数的生成
  2. linux查询关键词上下行_Linux:从文件中搜索关键字并显示行数(cat,grep函数)
  3. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇:简介及目录》(附上完整工程文件)...
  4. Android 检查版本更新 Server后台下载
  5. C语言验证大小端的几个方法
  6. php传递参数给asp.net,asp.net 传值总结
  7. [django]Django输出页面方式的补充
  8. @程序员,你真的懂数据可视化吗?
  9. docker compose安装_docker stack,docker-compose前世今生
  10. Python学习笔记(5),Battleship 游戏
  11. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数求1/1+1/3+…+1/n
  12. 添加图书的代码C语言,C语言图书系统代码.doc
  13. 输入10个学生某门课的成绩,用函数找出最高分、最低分,计算平均分,并在主函数中输入和输出(用函数和全局变量来完成)(C语言)
  14. DANN困扰解决-交替训练数据
  15. 代数合并同类项计算机步骤,代数式(合并同类项)
  16. Win10远程桌面,用户账户无效的解决方法
  17. Windows系统下安装CVAT标注工具
  18. 浅析局域网ARP欺骗导致的信息泄露
  19. 2022-2028年全球与中国工业分析软件市场现状及未来发展趋势分析报告
  20. dllcache“转移”到别的盘

热门文章

  1. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)
  2. django学习之Model(四)MakingQuery
  3. 无废话ADO.NET 第二章 关于连接
  4. 美团产品顾问马占凯:关于育儿,你需要知道的一切
  5. 干货 | 深入浅出分销体系
  6. 3 Useful BookmarkLets for Debugging
  7. unity, List namespace
  8. LUA Learning Note 4: 数据结构
  9. eclipse运行时不自动保存的解决方法
  10. IDL关系运算符Eq Ne Le Lt Gt Ge含义说明