多用户博客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天的自动草稿或超过半年的草稿。
同时最好还在内容列表页增加适当的提示语句,提醒尽快发布草稿内容,以防被回收。如下图所示:
本文为原创文章,转载请注明出处!