
WordPress的Auto Draf和Revisions的确是很烦人的问题,网上有超多的解决方法,插件,修改代码,有些很全面,有些比较局部,经过一轮测试,终于算是暂时的成功,记录并分享一下,仅以现在版本3.0.1为例子。
一、wp-config.php
此处只需要在 define (‘WPLANG’, ”); 下添加一行代码define (‘WP_POST_REVISIONS’, false);,每个人的配置不同,这里可能也不尽相同,效果如下
define ('WPLANG', '');
define ('WP_POST_REVISIONS', false);
此处修改完毕,基本可以禁止了wordpress后台的多版本控制功能。
二、wp-admin/includes/post.php
该文件可谓掌握Auto Draf生死大权
用编辑器(推荐Editplus,简单易用)打开该文件,找到 get_default_post_to_edit 这个函数,应该如下(省略部分不重要的内容):
function get_default_post_to_edit( $post_type = 'post', $create_in_db = false ) {
//......
if ( $create_in_db ) {
Cleanup old auto-drafts more than 7 days old
$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
$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
$post = get_post( $post_id );
} else {
//...
}
上面这段代码在点击Add New(添加新文章)的时候,先检查数据库里面标记为auto-draft并且在7前的数据,并进行删除,然后新建一个auto-draft,作为当前文章打开,也就是说,无论你是否有保存草稿、发布,这个auto-draft在你新建文章的那一刻就已经存在,假如你不去理会就此关掉这个“无题”文章的话,次auto-draft依然存在,而下次在新建的时候,又会是新的一个……如此如此,你文章的ID就这么HLL地断了,数据库的垃圾也越来越多。
如何修改呢?请看下面:
function get_default_post_to_edit( $post_type = 'post', $create_in_db = false ) {
//......
if ( $create_in_db ) {
// Cleanup old auto-drafts more than 7 days old
//$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
$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' ) ) );
}
//$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
//$post = get_post( $post_id );
} else {
//...
}
注释掉的部分就是原来的代码(也就是这些代码不会运行了),新增的代码意思是,在增加一个auto-draft的时候先检测有无一个存在,如果存在,则打开已经存在的,这样,就不会增加无谓的ID了。
新增的部分将原代码分成上下两部分,上面一部分是删除7天前的auto-draft,下面是新建,假如觉得有必要删除而不想进数据库操作的话,把上面的部分注释去掉就可以了。
附带删除auto-draft,inherit的sql语句(请谨慎使用)
delete from wp_posts where post_status = 'inherit' delete from wp_posts where post_status = 'auto-draft'
三、Disable autosave插件
这个是月光写的一个插件,虽然只有寥寥几行代码,但是却无比强大。
装这个插件的原因是由于在修改已经发布的文章之后,即使禁止了Revisions,但是万恶的autosave功能一样还是会生成一条inherit的记录来保存修改之前的文章,这个就是我无法不用这个插件的原因。
最后,修改Wordpress的源文件(第二条)是不对的,也是不安全,并且也是麻烦的,随着升级,这些更改会被覆盖。所以,大家有插件还是用插件,能在wp-config里面配置还是配置下就好,最好就是Wordpress下个版本就能够有这些功能的控制面板。
上面的方法搜集自网络,大家都雷同,不知道应该写哪里是出处,就不追究了。如何还有什么更好的方法或者问题,欢迎留言交流!





No Comments on "禁用WordPress的Auto Draf和Revisions"