A-
A+
WordPress最新2026年关闭禁用自动草稿 自动修订的方法,亲自测试有效 !
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版本测试通过 全网唯一有效的方法
