该死的自动草稿问题

首先根除罪魁祸首,WordPress的3.0后又出来兴风作浪的自动草稿……
先附个原帖链接,解决3.0时候的问题:http://www.akii.org/wordpress-3-0-prohibit-to-historical-versions-and-automatically-save-the-draft.html
(原理基本就是这样,以下办法试用于WordPress3.5.1。2012-8-22更新)
该死的Auto-draft

修改文件wp-admin/includes/post.php,其中找到

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 {

已经没有以前的“清除七天以前的自动草稿”功能了,直接就是插入一条新草稿,然后按照theme走格式。如果你继续写文章并发布,那么这条草稿就被使用了,包括在后台首页有一个快速发布,也用到了这个。但如果你仅仅是点击了new post(添加文章),接下来没有输入任何内容就跳到别的页面去了或关闭了,此时仍然会生成一个自动草稿,而这个草稿,是后台不可见的,是垃圾数据。

修改为

if ( $create_in_db ) {
    $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 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 {
    ......
}

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

之后是更麻烦的问题,把已经不连续的文章恢复连续,就是另一篇文章的故事了。