WordPress的自动保存功能在我看来是一道伤,鸡肋的很纠结。虽然他的初衷是为了保存用户的文章,以防万一出现意外的情况而丢失。可惜在逻辑上对于自动保存处理的很不好,特别是对于ID有洁癖的人来说更是如此,虽然我不是以ID来命名博客标题的,但是,我依旧要ID的连续。
网上关于此类的修改不胜枚举,但是很多都是只针对一个版本的,WordPress一更新就失效了,3.0.x系列的修改方法就不适合于3.1.x版本的,很是纠结。
WordPress 4.4+关闭自动保存草稿功能
打开 wp-config.php 文件,在 $table_prefix = ‘wp_’; 前面添加下面的两行代码:
define('WP_POST_REVISIONS', false);//禁用历史修订版本
define('AUTOSAVE_INTERVAL', false);//自动保存时间设置为一天
打开 wp-admin/post.php 文件,搜索并注释
//if ( 'attachment' !== $post_type )
// wp_enqueue_script('autosave');
打开 wp-admin/post-new.php 文件,搜索并注释
//wp_enqueue_script( 'autosave' );
打开 wp-admin\includes\post.php 文件,搜索并修改
/* 修改-注释两行代码禁用自动草稿*/
/*
$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
$post = get_post( $post_id );
*/
/* 修改开始*/
global $current_user,$wpdb;
$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 );
}
/* 修改结束 */
WordPress 3.1.x关闭自动保存草稿功能
有时候不得不手动修改WP的数据库来调整ID,很是烦恼,最近WP有升级到了3.1.1了,从3.1开始用Super Switch这个插件,稍稍有点效果,但是有时候还是发现会出现auto-draft,正好在看到一篇文章,ShunYea的《关闭WordPress 3.1版的自动草稿(auto-draft)》。经过我在3.1.1下的测试,发现很好,不管我怎么修改之前的文章,新发表的文章ID还是连续的,现在把方法分享给大家,希望对那些有需要的朋友有些帮助。
首先安装Super Switch这个插件,将“保存修订版本”和“自动保存”设为禁止。
然后找到”/wp-admin/includes/post.php”文件,搜索“$create_in_db”,不含引号。可以发现,大概从399行开始代码就是产生这个自动草稿的:
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 );
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' ) );
}
注意,如果是WordPress 3.0版(包含3.0.x版)要么删除“// Below is added in 3.1”及后面的 2 行代码,要么就是用3.0.x版的修改方法。
转走了,避免失效
牛逼 搜索整个网络 就这个对
@落英缤纷都是经过实践的
收藏了,打算把自己的博客也改一改,去掉自动保存这个没用的功能。
其实自动保存功能挺好的~~
留着无妨~~
@金刚是的,不过我属于不喜欢的那类人,哈哈
没的到那一句话,或许是记错了。嘿嘿。
@wmtimes嘿嘿~每个版本的修改貌似都不一样,这个有点小悲剧
博主真心牛逼..博客设计的太漂亮了额。
我想问一下你那个日志统计是插件还是什么呢?
WordPress 于我也许不会太远了
@阿德额,可以啊,WP的确是很棒的
换了头像啊
这么可爱 哈哈
@Paran很可爱,哈哈
我还是不关了,万一断电死机什么的,呵呵~
@奚少我都是用记事本先写日志的。呵呵