禁用WordPress的Auto Draf和Revisions

WordPressAuto DrafRevisions的确是很烦人的问题,网上有超多的解决方法,插件,修改代码,有些很全面,有些比较局部,经过一轮测试,终于算是暂时的成功,记录并分享一下,仅以现在版本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下个版本就能够有这些功能的控制面板

上面的方法搜集自网络,大家都雷同,不知道应该写哪里是出处,就不追究了。如何还有什么更好的方法或者问题,欢迎留言交流!

Wordpress at 2010, August 14, 3:43 pm, Tags: , , , , ,
Trackback URL

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

Hi Stranger, leave a comment:

ALLOWED XHTML TAGS:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe to Comments