租号玩代理申请
A- A+

WordPress最新2026年关闭禁用自动草稿 自动修订的方法,亲自测试有效 !

2026年07月08日 建站相关 暂无评论 阅读 15 次 打印

WordPress的自动草稿和自动修正版本的这个功能一直很烦人,大多数人都不需要,很多人为了这个安装插件清理数据库,那么今天我们就彻底关闭他

第一步:
编辑网站根目录下的wp-config.php文件
在$table_prefix = 'wp_';的 上方加入代码

define('WP_POST_REVISIONS', false);//禁用历史修订版本
define('AUTOSAVE_INTERVAL', 86400);//自动保存时间设置为一天

第二步:
编辑wp-admin下的post.php,找到下面代码,大约在185到188行

			if ( 'attachment' !== $post_type ) {
//				wp_enqueue_script( 'autosave' ); 把这一行注释
			}
		}

编辑wp-admin下的post-new.php,找到下面的代码,大约在74行

/** This filter is documented in wp-admin/post.php */
if ( apply_filters( 'replace_editor', false, $post ) !== true ) {
	if ( use_block_editor_for_post( $post ) ) {
		include( ABSPATH . 'wp-admin/edit-form-blocks.php' );
	} else {
//		wp_enqueue_script( 'autosave' );  注释这一行
		include( ABSPATH . 'wp-admin/edit-form-advanced.php' );
	}

第三步:找到主题目录下的functions.php,在最后加入以下代码

add_action('current_screen', function($current_screen){
	// 只有新建文章的时候才执行
	if($screen_base != 'post' || $current_screen->action != 'add' || $current_screen->post_type == 'attachment' ){
		return;
	}

	//如果内存中已有上次创建的自动草稿
	if($last_post_id = wp_cache_get(get_current_user_id(), 'wpjam_'.$current_screen->post_type.'_last_post_id')){
		$post	= get_post($last_post_id);
		if($post && $post->post_status == 'auto-draft'){
			wp_redirect(admin_url('post.php?post='.$last_post_id.'&action=edit'));	
			exit;
		}
	}

	add_action('admin_footer', function(){
		global $post;
		//将自动草稿ID缓存到内存中
		wp_cache_set(get_current_user_id(), $post->ID, 'wpjam_'.$post->post_type.'_last_post_id', HOUR_IN_SECONDS);
	});
}, 10, 2);

或者加入下面这个版本也行,我也不知道哪个好,都是我爱水煮鱼写的。

// 禁止WORDPRESS自动草稿 /////////////////////////////////
/** 关闭自动保存脚本加载 **/
//移除自动保存
//wp_deregister_script('autosave');
//移除修订版本
//remove_action('post_updated','wp_save_post_revision' );
// 禁止WORDPRESS自动草稿 /////////////////////////////////
/* 我爱水煮鱼的关闭自动草稿 https://blog.wpjam.com/m/memcached-4-auto-draft/ */
add_action('current_screen', function ($current_screen){
	// 只有新建文章的时候才执行
	if($screen_base != 'post' || $current_screen->post_type == 'attachment' || $current_screen->action != 'add'){
		return;
	}

	//如果内存中已有上次创建的自动草稿
	if($last_post_id = wp_cache_get(get_current_user_id(), 'wpjam_'.$current_screen->post_type.'_last_post_id')){
		$post	= get_post($last_post_id);
		if($post && $post->post_status == 'auto-draft'){
			wp_redirect(admin_url('post.php?post='.$last_post_id.'&action=edit'));	
			exit;
		}
	}

	add_action('admin_footer', function(){
		global $post;
		//将自动草稿ID缓存到内存中
		wp_cache_set(get_current_user_id(), $post->ID, 'wpjam_'.$post->post_type.'_last_post_id', HOUR_IN_SECONDS);
	});
}, 10, 2); 
/* 我爱水煮鱼的关闭自动草稿 https://blog.wpjam.com/m/memcached-4-auto-draft/ */

第四步:编辑/wp-admin/includes/post.php
搜索关键字 $create_in_db 并注释 if 语句的前两句代码(以下为注释后的结果,部分内容省略)

......
if ( $create_in_db ) {
  // $post_id = wp_insert_post(
  //  array(
  //    'post_title'  => __( 'Auto Draft' ),
  //    'post_type'   => $post_type,
  //    'post_status' => 'auto-draft',
  //  ),
  //  false,
  //  false
  // );
  // $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' ) );
  }
  wp_after_insert_post( $post, false, null );
 
  // Schedule auto-draft cleanup.
  if ( ! wp_next_scheduled( 'wp_scheduled_auto_draft_delete' ) ) {
    wp_schedule_event( time(), 'daily', 'wp_scheduled_auto_draft_delete' );
  }
} else {
  ......
}
......

将以下代码添加到被注释的代码下方,保存后退出

global $wpdb;
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 post_date ASC, ID ASC LIMIT 1" );
if(!$post) {
  $post_id = wp_insert_post(
    array(
      'post_title'  => __( 'Auto Draft' ),
      'post_type'   => $post_type,
      'post_status' => 'auto-draft',
    ),
    false,
    false
  );
  $post = get_post( $post_id );
}

以下为修改后的结果,部分内容省略

......
if ( $create_in_db ) {
  // $post_id = wp_insert_post(
  //  array(
  //    'post_title'  => __( 'Auto Draft' ),
  //    'post_type'   => $post_type,
  //    'post_status' => 'auto-draft',
  //  ),
  //  false,
  //  false
  // );
  // $post    = get_post( $post_id );
 
  global $wpdb;
  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 post_date ASC, ID ASC LIMIT 1" );
  if(!$post) {
    $post_id = wp_insert_post(
      array(
        'post_title'  => __( 'Auto Draft' ),
        'post_type'   => $post_type,
        'post_status' => 'auto-draft',
      ),
      false,
      false
    );
    $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' ) );
  }
  wp_after_insert_post( $post, false, null );
 
  // Schedule auto-draft cleanup.
  if ( ! wp_next_scheduled( 'wp_scheduled_auto_draft_delete' ) ) {
    wp_schedule_event( time(), 'daily', 'wp_scheduled_auto_draft_delete' );
  }
} else {
  ......
}
......

上边这段代码和我这个文章结尾有轻微的不一样,我目前用的还是文章结尾的那段代码,可以自己试着测试一下。

追加:
functions.php里加入

//保留登录管理员可用 REST,仅拦截自动保存路由,既能减少草稿,又不影响后台正常操作:
function lerm_disable_rest_api( $access ) {
	// 登录用户放行,但屏蔽自动保存接口
	if ( is_user_logged_in() ) {
		$route = $GLOBALS['wp']->query_vars['rest_route'] ?? '';
		// 拦截自动保存路由,阻止定时生成auto-draft
		if ( ! empty( $route ) && strpos( $route, '/wp/v2/autosave' ) === 0 ) {
			return new WP_Error(
				'Stop_autosave',
				'禁止自动草稿保存',
				[ 'status' => 403 ]
			);
		}
		return $access;
	}
	// 游客直接禁用全部REST
	return new WP_Error(
		'Stop!',
		'Soooooryyyy',
		[ 'status' => 403 ]
	);
}
add_filter( 'rest_authentication_errors', 'lerm_disable_rest_api' );
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );

//把附件相关逻辑完全隔离,在 wp_insert_post_data 最开头加一行判断附件直接放行
add_filter( 'pre_insert_post', function( $postarr ) {
    // 放行附件上传
    if ( isset($postarr['post_type']) && $postarr['post_type'] === 'attachment' ) {
        return $postarr;
    }
    // 碰到自动草稿就终止本次入库
    if ( isset($postarr['post_status']) && $postarr['post_status'] === 'auto-draft' ) {
        return null;
    }
    return $postarr;
}, 999 );

总结
如果需要长时间使用 WordPress 自带的编辑器编写文章,那么自动保存功能还是很重要的。

如果是和我一样先写好文章再复制粘贴过去,那么建议把自动草稿和历史版本功能都禁用。

同时可以参考我以前发表的文章:WordPress 4.1+关闭自动保存草稿功能 最新在5.2版本测试通过 全网唯一有效的方法

给我留言

6 + 7 =
评论规范提醒