多用户博客woblog关于草稿auto-draft的自动回收机制

多用户博客woblog基于wordpress(以下简称wp)优化和修改,而wp中的自动草稿(auto-draft)是个让人头疼的功能,尤其是在用户量巨大的多用户博客系统中,能产生大量的垃圾数据,网上也有一些方法针对这个问题的,最终woblog还是根据自身的特点,写了一段自动回收草稿的代码,既能避免产生过多垃圾,也能保证数据的连续性,其原理就是对于自动草稿和草稿这两种类型的内容,在一定时间后没有发布的,系统将自动回收分配给其他用户使用。具体修改/admin/includes/post.php,请注意此代码只适合在woblog中使用,在wp下需要修改,因为woblog在wp的基础上增加了几个字段。首先找到以下代码:

function get_default_post_to_edit( $post_type = 'post', $create_in_db = false ) {
    $post_title = '';
    if ( ! empty( $_REQUEST['post_title'] ) ) {
        $post_title = esc_html( wp_unslash( $_REQUEST['post_title'] ) );
    }

    $post_content = '';
    if ( ! empty( $_REQUEST['content'] ) ) {
        $post_content = esc_html( wp_unslash( $_REQUEST['content'] ) );
    }

    $post_excerpt = '';
    if ( ! empty( $_REQUEST['excerpt'] ) ) {
        $post_excerpt = esc_html( wp_unslash( $_REQUEST['excerpt'] ) );
    }

    if ( $create_in_db ) {

在 if ( $create_in_db ) { 后面加上我们修改的代码如下:

global $wpdb, $current_user;
$post = $wpdb->get_row( "select * from wp_posts where ((post_status = 'auto-draft' AND post_date < '" . date('Y-m-d H:i:s', time()-3600*24*3) . "') OR (post_status = 'draft' AND post_date < '" . date('Y-m-d H:i:s', time()-3600*24*180) . "')) AND post_type = '$post_type' ORDER BY ID 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 );
} else {
    $post->post_date = date('Y-m-d H:i:s', time());
    $post->post_author = $current_user->ID;
    $post->blog_id = $wpdb->blogid;
    $post->post_title = '';
    $post->post_content = '';
    $post->post_name = '';
    $post->is_original = 0;
    $wpdb->query( "update wp_posts set post_title='',post_content='',post_name='',post_status = 'auto-draft',guid='',post_date='" . $post->post_date . "', post_author=" . $post->post_author . ", blog_id=" . $post->blog_id . ", is_original=0 where ID = " . $post->ID );
    $post->guid = get_permalink( $post->ID );
    $wpdb->query( "update wp_posts set guid='" . addslashes($post->guid) . "',post_date='" . $post->post_date . "', post_author=" . $post->post_author . ", blog_id=" . $post->blog_id . " where ID = " . $post->ID );
    $wpdb->query( "update wp_postmeta set meta_value='' where post_id = " . $post->ID );

}

上面代码的作用是:如果数据库里有可以回收的记录,则回收之,如果没有就新建一条记录;回收的规则是:超过3天的自动草稿或超过半年的草稿。

同时最好还在内容列表页增加适当的提示语句,提醒尽快发布草稿内容,以防被回收。如下图所示:

本文为原创文章,转载请注明出处!