禁用WordPress3.1.x自动保存与历史版本控制
时间:2011年04月27日作者:Shieh查看次数: 754 views评论次数:1
撤掉禁止 WordPress 自动保存与历史版本控制会造成ID的不连续,对于追求完美的人来说, 对自动保存和历史版本控制功能并不是太感冒, 呵呵。找了下, 汇总了一些关于禁止自动保存和历史版本控制的办法。
1. 首先在 wp-config.php 文件, 在 if ( !defined(‘ABSPATH’) ) 前面添加以下代码:
define('AUTOSAVE_INTERVAL', false);
define('WP_POST_REVISIONS', false);
2. 在 wp-includes/default-filters.php 中, 加 // 注释掉 wp_save_post_revision 这个函数。
// add_action( 'pre_post_update', 'wp_save_post_revision' );
3. 在 wp-admin/post.php 及 post-new.php 文件中, 继续注释掉
// wp_enqueue_script('autosave');
4. (1) 找到 wp-admin/includes/post.php 文件中的 wp_create_post_autosave 函数, 将该函数的最后一句:
return _wp_put_post_revision( $_POST, true );
改为:
return edit_post();
通过修改这两行代码,即保留了自动保存功能,又去掉了历史记录功能,另一个额外的好处是可以让文章ID连续增长。
(2) 另外也可以从 wp-admin/includes/post.php 文件中找到这段(大概在399行处):
if ( $create_in_db ) {
在它下面找到这部分代码:
$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) ); $post = get_post( $post_id );
修改为:
$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' ) ) );
}
(3) 又或者可以将下面整个代码:
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 );
// Below is added in 3.1
if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )
set_post_format( $post, get_option( 'default_post_format' ) );
} else {
$post->ID = 0;
$post->post_author = '';
$post->post_date = '';
$post->post_date_gmt = '';
$post->post_password = '';
$post->post_type = $post_type;
$post->post_status = 'draft';
$post->to_ping = '';
$post->pinged = '';
$post->comment_status = get_option( 'default_comment_status' );
$post->ping_status = get_option( 'default_ping_status' );
$post->post_pingback = get_option( 'default_pingback_flag' );
$post->post_category = get_option( 'default_category' );
$post->page_template = 'default';
$post->post_parent = 0;
$post->menu_order = 0;
}
将上面的代码替换为:
if ( $create_in_db ) {
global $current_user;
$post = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY ID ASC 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 );
}
/* End */
// Below is added in 3.1
if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )
set_post_format( $post, get_option( 'default_post_format' ) );
}
OK, 这些全部搞定了, 自动保存功能还可以用, ID也能够连续了, perfect。
删除已经生产的版本控制命令为:
DELETE FROM wp_postmeta WHERE post_id IN (SELECT id FROM wp_posts WHERE post_type = 'revision'); DELETE FROM wp_term_relationships WHERE object_id IN (SELECT id FROM wp_posts WHERE post_type='revision'); DELETE FROM wp_posts WHERE post_type='revision');
将ID重新设置为连续, 设置一个ID就要4条SQL语句, 比如将ID为99的文章修改为ID为88, 需要执行以下语句。
update wp_posts set id = 88 where id = 99; update wp_term_relationships set object_id = 88 where object_id = 99; update wp_postmeta set post_id = 88 where post_id = 99; update wp_comments set comment_post_ID = 88 where comment_post_ID = 99;
文章ID连续了, 但继续发表新文章时, ID还是会从之前不连续时的最大数字往后编。
这时, 修改下 auto_increment 的数值就OK了,即在 phpmyadmin 中执行下面语句:
alter table wp_posts AUTO_INCREMENT=n
n=梳理后的最大id+1, 比如梳理后最后一篇文章的id是50,那么n就设为51。
另外如果觉得修改代码麻烦的, 可以按照 Super Switch 插件, 将“自动保存”和“保存修订版本”设为禁止。
PS: 补充另外一种更加简单有效的办法, 在主题的 functions.php 文件里面加入如下代码即可
wp_deregister_script('autosave');
remove_action('pre_post_update', 'wp_save_post_revision' );
或者
remove_action('pre_post_update', 'wp_save_post_revision' );
wp_deregister_script('autosave');
remove_filter('the_content', 'wptexturize');
这样便可以避免更新升级wordpress版本的时候又去修改源代码的麻煩了。


最新评论
您好,国人的 Syntax Highlighter »
Post:2012-01-07 12:59:39你就直接给个链接呗,搜不到啊
Post:2011-12-23 01:35:20最近开始搞drupal了,为的就是以后 »
Post:2011-11-15 02:50:50这位MM竟然会在这里遇到你
Post:2011-11-14 04:54:01瓦,我喜欢这种原创技术笔记博客~ »
Post:2011-11-08 02:00:43好多博文都推荐插件,您的文章给了 »
Post:2011-11-08 01:58:50上面的方法,现在还有效? 不行呀 »
Post:2011-10-08 02:46:15你很厉害 特别是对worldpress的研究啊
Post:2011-10-07 07:05:55