WordPress网站定制开发专家
WordPress企业主题特惠

赞一个 0

WordPress的文章自动保存和历史版本保存 (Post Revisions)的功能对博客来说简直就是个鸡肋,我是看到文章ID不连续才发现这个问题,自动保存的文章和历史版本都会被保存到wp_posts表。

搜索了一下,Wordpress很早就存在这些问题,网上也已经有很多解决方案。最后,我安装了Disable autosave插件禁用自动保存功能,在wp-config.php文件中增加一行define(‘WP_POST_REVISIONS’, false);禁用Post Revisions。不过,奇怪的是文章ID依然不连续,遂再查看数据库,还有自动草稿(auto-draft)的空记录。按照月光解决WorPress 3.0.1自动草稿的方法,编辑wp-admin/includes/post.php文件,在if ( $create_in_db ) {语句之前加入一行$create_in_db = false; 语句,发现对Wordpress 3.1已经无效,添加后保存文章时提示“没有修改权限”。

Wordpress 3.1禁止自动草稿的两种方法

既然没有现成方案,自己看了if ( $create_in_db )之后的代码,摸索出两种修改代码方法,可以使不可见的自动草稿空记录消失。

方法一是,把406行代码:

$post_id = wp_insert_post( array( ‘post_title’ => __( ‘Auto Draft’ ), ‘post_type’ => $post_type, ‘post_status’ => ‘auto-draft’ ) );

修改为:

$post_id = wp_insert_post( array( ‘post_title’ => __( ‘Auto Draft’ ), ‘post_type’ => $post_type, ‘post_status’ => ‘draft’ ) );

这样打开写新文章时,还是会自动在wp_posts表中保存一条空记录,不过是草稿,可以在文章列表中看到,下次写文章时可直接编辑该条。缺点是,如果多次打开添加新文章而没写就关闭,会累积过多的草稿。

方法二,同样是修改方法一种提到的406行,修改为

$sql = “SELECT ID FROM $wpdb->posts WHERE post_status = ‘auto-draft’ LIMIT 1”;
$post_id = intval($wpdb->get_var($sql));
if ($post_id == 0 ) {
$post_id = wp_insert_post( array( ‘post_title’ => __( ‘Auto Draft’ ), ‘post_type’ => $post_type, ‘post_status’ => ‘auto-draft’ ) );
}

原理是找到最先一条的自动草稿,把它作为当前文章使用,这样既可以保持原有自动草稿功能,还可以保持文章ID连续。用这个方法修改可以把删除7天前自动草稿的语句删掉:

$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

综上所述,Wordpress 3.1的文章自动保存(Auto-Save)、历史版本(Post Revisions)和自动草稿(Auto-Draft)的功能都禁用了。修改系统文件的缺点是,以后每次升级Wordpress都要再次手动修改,增加了维护麻烦。建议Wordpress官方把这些功能做成插件或给用户选择启用,就省去用户的折腾了。

转载:天空巴士

上一篇:

下一篇:

在线评论

在线客服
在线客服关闭
WPYOU官方微信

扫码关注官方微信