禁用WordPress 3.0自动草稿存档


  昨天将另外几个WordPress博客从2.9.2升级到了3.0.1,没想到发现了一些问题,以前已经很好解决的自动草稿存档问题又出现了,折腾了半天才解决。

  做为一个id控,我一直喜欢用数字id做为日志文件名,而WordPress自从2.6版本之后就出现了几个很令人讨厌的功能:Post Revisions和Autosave,在默认的情况下,日志的ID将不再连续,使用ID做为Permalink结构的用户将会看到一个地址越来越混乱的WordPress,很烦,后来我通过一个插件很完美的解决了这个日志ID不连续的问题,并一直用到了2.9.2都没问题,升级到3.0.1之后,自动草稿又出来了,但是该插件依旧在工作,通过跟踪发现,只要新建一篇日志,即使不写内容,数据库中也会自动保存一篇草稿,这是以前版本的WordPress所没有的现象,也是disable revisions and autosave插件失效的原因。

  既然已经升级到了WordPress 3.0.1,也不好降级,只好再想办法解决Wordpress自动保存草稿的问题,经过搜索,找到了一个不是很好的禁用自动保存草稿的方法。

  解决WorPress 3.0.1自动草稿的方法是:依旧启用原先的disable revisions and autosave插件,然后编辑wp-admin/includes/post.php文件,在if ( $create_in_db ) {语句之前加入一行$create_in_db = false; 语句,经过实际测试,增加了这一行之后,新建日志,数据库就不会出现一篇自动存档的草稿了。

  但是这种修改WordPress源代码的方法是很不好的,这会导致以后每次WordPress升级,都需要维护修改一次,工作量会越来越大,不如用插件的方式解决,可惜目前实在找不到如何使用插件来解决这个问题,要是WordPress下一个版本能官方解决就好了。

  更新:上述禁用自动草稿(Auto-Draft)的方法仅仅针对Wordpress 3.1以前的版本,对Wordpress 3.1以后的版本是无效的,添加后保存文章时提示“没有修改权限”。Wordpress 3.1以后的版本修改方法是:

  依旧编辑wp-admin/includes/post.php文件,找到下面两行:

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

  将其替换为如下几行即可:

$post_auto_draft = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_type = '$post_type' AND post_status = 'auto-draft' LIMIT 1" );
if ( $post_auto_draft ) {
    $post = $post_auto_draft;
} else {
    $post = get_post( wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) ) );
}

  总结:WordPress的自动保存(Auto-Save)、历史版本(Post Revisions)和自动草稿(Auto-Draft)的功能真是麻烦,在数据库中产生大量垃圾数据,并且自动草稿(Auto-Draft)目前只能通过修改源代码来实现,希望WordPress官方能够提供一种选项,让用户可以选择是否启用自动草稿(Auto-Draft)功能。