关闭WordPress 3.0版的自动草稿(auto-draft)功能

2010年08月24日   网站建设   5条评论   4284人围观过  

  作为一个有ID洁癖的人,使用WordPress必定会安装Disable Revisions and Autosave这个插件,因为连续的ID号可以使文章编号看起来更美观,更重要的是可以减少数据库中垃圾数据的存在。

  在我使用Z-blog的时候就考虑过是否要转换到WordPress,因为这样可以顺应众多站长的潮流。但是WordPress一直有这个问题,所以没换。在得知了某些插件可以解决这些问题后,我就硬着头皮换到了WordPress。还好,2.9.X版一直用着比较顺手了。可是在3.0推出后,就一直想更新,毕竟自己开发过程序,知道升级的好处,而且貌似还有升级瘾,呵呵。一直忍耐到了官方的3.0.1中文版出来后,就正式升级了。

  可惜,在月光博客上看到一篇文章后,又开始对3.0头大了。怎么又冒出个自动草稿(auto-draft)功能。这个既不是以前的Revisions也不是Autosave,而是auto-draft。当然,如果你点击新建一篇文章,然后接着就写完发表,那么这个问题可能不存在,但是如果你点击了新建文章后,没写东西,或者写了几个字又点击其他页面,不想写了,那么你在数据库中查看,将占用一条记录,被标记为了auto-draft,即自动草稿。

  自动保存固然好,可以防止在编辑过程中数据丢失,但是这个几率很小,有时候几乎用不到,所以,节省数据库空间比这个还重要,我们又考虑将该功能关闭。

解决方案



  很遗憾,在3.0才发布了这段时间里,没有插件可以解决这个问题(或许是没有找到),那么还得手工来解决了,即修改代码。同样月光博客上那篇文章也提供了相关解决方案。经过我搜索,月光的这个方法是比较简单的一种,其他方法是修改代码逻辑,即没有关闭这个功能,但是让下一次新建文章时候来使用这个在数据库中空闲的记录,这样就不会浪费了。但是我们仍然讲解月光的这个简单方法,我试验过也成功了。月光的方法修改代码量小,出错几率小。修改代码逻辑修改比较多,容易出错。

  找到wp-admin\includes\post.php文件,其中从374行开始(3.1版此方法失效,请勿使用)的如下的代码即是产生auto-draft的代码:

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 {
		$post->ID = 0;
		$post->post_author = '';
		$post->post_date = '';
		$post->post_date_gmt = '';
		$post->post_password = '';
		$post->post_type = $post_type;
		$post->post_status = 'draft';
		$post->to_ping = '';
		$post->pinged = '';
		$post->comment_status = get_option( 'default_comment_status' );
		$post->ping_status = get_option( 'default_ping_status' );
		$post->post_pingback = get_option( 'default_pingback_flag' );
		$post->post_category = get_option( 'default_category' );
		$post->page_template = 'default';
		$post->post_parent = 0;
		$post->menu_order = 0;
	}


  解决方法很简单,在这段代码前面,即if ( $create_in_db ) {前面加上这句代码就可以了:

$create_in_db = false;

  将修改好的这个文件上传到空间覆盖源文件,继续享用WordPress吧!

  • 评论列表:
  •  in
     发布于 2011-03-05 07:05:27  回复该评论
  • 3.1用上面的方法失败,体现为发表新日志的时候提示无权限更改该文章
    •  ShunYea
       发布于 2011-03-05 19:17:21  回复该评论
    • 现在暂时没有办法解决了,只能是发表文章点击添加后要一次发表完成,否则还是会生成自动草稿。至于编辑文章过程中用原来那两个插件还是能继续起作用的,不使发表文章过程中自动保存。
  •  fengfree
     发布于 2011-03-05 19:50:09  回复该评论
  • 我新安装的wp3.1,按这种方法也出现发表新日志的时候提示无权限更改该文章。
    •  ShunYea
       发布于 2011-03-05 22:42:54  回复该评论
    • 现在暂时没有办法解决了,只能是发表文章点击添加后要一次发表完成,否则还是会生成自动草稿。至于编辑文章过程中用原来那两个插件还是能继续起作用的,不使发表文章过程中自动保存。
  •  gesion
     发布于 2011-03-07 19:03:55  回复该评论
  • 谢谢博主的文章,3.1自动草稿问题通过修改少量逻辑解决。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。