WordPress 3.0.1-4.1 禁用历史修订版本及自动草稿(auto-draft)的方法

摘要2015-2-6更新至4.1.1版本,WordPress 3.0.1很强大,可纳闷的是文章总是会自动增加历史修订版本和自动草稿(auto-draft),可能开发团队考虑的比较全面,防止用户丢失正在编辑的信息,可无形中也加大了数据库的冗沉信息。这对咱有ID洁癖的人来说,可真是要命的事,所以本文就来说一下如何禁用历史修订版本和自动草稿的办法。

刚接触WordPress不久,自然选择了最新的3.0.1版本,功能很强大,包括IIS6伪静态实现都很方便,对SEO也大有好处。可是,问题来了,这版本添加文章时,总是会产生历史修订版本和自动草稿(auto-draft),很是闹心。数据库posts表那断断续续的ID,还有一大堆冗沉信息,简单算了下,一篇文章成功添加竟会多出莫名其秒的10来条数据,唉,纠结阿,还很蛋疼。

2015-2-6更新至WordPress 4.1版本

随便GG了下,发现这WordPress的通病了,并不是仅仅3.0.1中才会出现。赶紧想办法解决,网上也有不少的解决办法,可是或多或少都存在一些小问题,不是很完美。下面,说说我这两天折腾的办法,经测试很OK,放心去试吧。

说明:以下修改方法需要更改程序文件,建议用专门的PHP编辑软件来操作,如emeditor,editplus,dreamweaver,记事本等,注意保存格式。

1)禁用WordPress历史修订版本

在wordpress的程序根目录,配置文件wp-config.php中,找到

define ('WPLANG', 'zh_CN');

在下面加入如下代码:

/**
 * WordPress 编辑器自动保存和历史版本选项。
 *
 * 本项注释掉即可开启。
 */
define('WP_POST_REVISIONS', false);//禁用历史修订版本
define('AUTOSAVE_INTERVAL', false);//设置自动保存时间设置为一天

简单说明下这第二条:比如你在后台添加文章的时候,当输入标题,切换到内容输入时,系统会自动保存成草稿。当你编辑时,也会定时保存一下,防止你正在编辑的内容丢失。这个草稿是在后台可见的。所以这条根据你的需求来定。如果你想保留文章自动保存功能,你可以加上第二条。当然,你也可以直接无视它,按WordPress默认的自动保存来。其实我是建议把自动保存功能完全禁用掉,真是个烦人的东西,有时候自动草稿都能被搜索引擎收录,真是无语。

2)禁用WordPress自动保存功能

直接说方法了,首先打开如下两个文件

wp-admin/post-new.php

wp-admin/post.php

注释掉这行:

//wp_enqueue_script('autosave');

接下来,打开wp-admin/admin/post.php,374行开始,有个if判断如下:

if ( $create_in_db ) {
  // Cleanup old auto-drafts more than 7 days old
  $old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft' AND DATE_SUB( NOW(), INTERVAL 7 DAY ) > post_date" );
  foreach ( (array) $old_posts as $delete )
   wp_delete_post( $delete, true ); // Force delete
  $post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
  $post = get_post( $post_id );
 } else {

简单解释下这段代码,先是清除七天以前的自动草稿,然后插入一条新草稿,如果你继续写文章并发布,那么这条草稿就被使用了,包括在后台首页有一个快速发布,也用到了这个。而很诡异的是,如果你后台点了“添加文章”,没有输入任何内容或到别的页面或是关闭了,此时仍然会生成一个自动草稿,而这个草稿,是后台不可见的,是垃圾数据,隐形的祸害,也是造成文章ID不连续的隐形杀手,之后我会专门介绍清理WordPress垃圾数据和完美解决文章ID不连续问题的办法。
言归正传,我们直接将上面代码替换成

 if ( $create_in_db ) {
  // modify by lee start
  global $current_user;
  $post_auto_draft = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_author = $current_user->ID ORDER BY ID ASC LIMIT 1" );
  if ($post_auto_draft){
   $post = $post_auto_draft;
  } else {
   $post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
   $post = get_post( $post_id );
  }
  set_post_format( $post, get_option( 'default_post_format' ) );    
  // modify by lee end
 } else {

原理及说明:当数据库中有一条或多条状态为”auto-draft”的自动草稿时,取ID最小的,新文章即使用此条记录。如果没有此种类型的数据,才会新插入一条数据。并且查询数据时是根据当前的用户来判断,不会出现多用户时出错。这样就可以避免了自动草稿(auto-draft)的冗余垃圾数据。保证了日志ID的连续性。但最后我要提醒一句,如果你在日志中添加了附件,如图片,那么该图片也会占用一条数据,即一个连续的ID,所以,如果你以ID形式,发现日志有时候不是连续的ID了,那么,有可能是你日志的附件占用了临近的ID。

附:关于其它禁用自动草稿方法的说明

现在网上很常用的一个禁用自动草稿方法就是在如下代码

if ( $create_in_db )

前加上

$create_in_db = false;

这种方法很方便,也解决了文章发布按钮一闪一闪的问题。貌似很完美,其实还有一个严重的问题,就是你在添加新文章的时候,如果有自定义栏目,字段内容将保存不了,还会在postmeta表中插入一条无效数据,只有你重新编辑才能保存,所以还是建议采用我的这种方法,可以完美解决,觉得有用的要支持一下哦!

更新(2011-03-21):WordPress 3.1禁用历史修订版本及自动草稿(auto-draft)的方法

更新(2011-04-29):WordPress 3.1.2禁用历史修订版本及自动草稿(auto-draft)的方法

目前留言:4   其中:访客:4   博主:0

  1. 位置圈

    哇哦,貌似很复杂,我只是执行了第一步禁用WordPress历史修订版本
    结果发现,还是有历史版本产生
    不知是否必须将第二步执行完了才ok呢?

  2. 位置圈

    啊哦,原来是整错了标点符号,对了第二步有必要执行么,请问?
    不知道这个回复有没有邮件提示,没有的话能否邮件告知一下,多谢了

  3. 墨轩

    文章内容有误,在WP4.1中,没有“3)打开wp-admin/admin/post.php,查找$create_in_db,如下”这里面所说的目录结构,应该是wp-admin/includes/post.php,查找$create_in_db吧

    • 李 勇

      恩,你是对的,谢谢纠正。

评论加载中...

给我留言

图片 表情