给WP禁用自动保存和自动草稿

给WP禁用自动保存和自动草稿

网站建设Git开源网2019-08-13 22:55:3442A+A-

WordPress的版本修订历史(revision)、自动保存(autosave)和自动草稿(auto-draft)功能会非常讨厌的增加文章ID的数字,会造成连续的两篇文章,ID数值可能会相差很多,让我们这些希望文章ID连续的人感到非常不舒服。本文将介绍在WordPress5.2.2下如何禁止版本修订历史、自动保存和自动草稿的问题。

禁止版本修订历史(revision)和自动保存(autosave)

版本修订历史(revision)是在文章发布后,每次更新时向数据库添加一条版本修订历史记录。这种方式和wiki很像。然而,由于个人博客很少需要保留版本记录,这个功能显得有些鸡肋。不知为何WordPress不给这样的功能开一个设置选项,可以让用户选择是否开启。

自动保存(autosave)虽然应该存在,但WordPress的处理方式实在有些奇怪,自动保存居然也要占用文章ID,并且默认60s保存一次,这样会造成一篇文章写下来可能会消耗几十个ID,并且在数据库中存入了大量的无用信息。

0、wp-config.php文件,搜索define( ‘WP_DEBUG’, false );下方增加代码:

define('WP_POST_REVISIONS',false);//第2个参数代表禁用修订,为数字代表创建几个修订版本。
define('AUTOSAVE_INTERVAL', false);//第2个参数:N代表不限时间,如果指定时间,就以秒为单位,false表示禁用

1、wp-includes\functions.php文件,最后一行增加代码。

/** 取消自动保存和修订版本 */
remove_action(‘pre_post_update’,  ‘wp_save_post_revision’);
add_action(‘wp_print_scripts’,  ‘disable_autosave’);
function disable_autosave() {
wp_dereGISter_script(‘autosave’);
}

或(有效)

function keep_id_continuous(){
global $wpdb;
$lastID = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' OR post_status = 'draft' OR post_status = 'private' OR ( post_status = 'inherit' AND post_type = 'attachment' ) ORDER BY ID DESC LIMIT 1");
$wpdb->query("DELETE FROM $wpdb->posts WHERE ( post_status = 'auto-draft' OR ( post_status = 'inherit' AND post_type = 'revision' ) ) AND ID > $lastID");
$lastID++;
$wpdb->query("ALTER TABLE $wpdb->posts AUTO_INCREMENT = $lastID");
}
add_filter( 'load-post-new.php', 'keep_id_continuous' );
add_filter( 'load-media-new.php', 'keep_id_continuous' );
add_filter( 'load-nav-menus.php', 'keep_id_continuous' );
// 禁用自动保存,编辑长文章前请注意手动保存。
add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );
// 禁用修订版本,重新编辑文章请注意备份。
remove_action( 'pre_post_update' , 'wp_save_post_revision' );

2、wp-admin\post-new.php文件,搜索wp_enqueue_script( ‘autosave’ );,注释。

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' );
	}

3、wp-admin\post.php文件搜索wp_enqueue_script( ‘autosave’ );,注释,前面的if也注释。

if ( ! wp_check_post_lock( $post->ID ) ) {
			$active_post_lock = wp_set_post_lock( $post->ID );

			/* if ( 'attachment' !== $post_type ) {
				wp_enqueue_script( 'autosave' );
			} */
		}

4、 wp-includes\default-constants.php文件,搜索define( ‘AUTOSAVE_INTERVAL’, 60 );和define( ‘WP_POST_REVISIONS’, true );更改如下:

注意:此步骤也可按0步的wp-config.php文件配置。

// 修改前
if ( !defined( 'AUTOSAVE_INTERVAL' ) )
  define( 'AUTOSAVE_INTERVAL', 60 );
if ( !defined('WP_POST_REVISIONS') )
  define('WP_POST_REVISIONS', true );
 
// 修改后
if ( !defined( 'AUTOSAVE_INTERVAL' ) )
  define( 'AUTOSAVE_INTERVAL', false );
if ( !defined('WP_POST_REVISIONS') )
  define('WP_POST_REVISIONS', false );

其中autosave的60为自动保存时间间隔,单位为s,可以修改为更大的数值或修改为false禁用。

if ( ! defined( 'AUTOSAVE_INTERVAL' ) ) {
		//define( 'AUTOSAVE_INTERVAL', 60 );
		define( 'AUTOSAVE_INTERVAL', false ); //禁用自动草稿
	}

	/**
	 * @since 2.9.0
	 */
	if ( ! defined( 'EMPTY_TRASH_DAYS' ) ) {
		define( 'EMPTY_TRASH_DAYS', 30 );
	}

	if ( ! defined( 'WP_POST_REVISIONS' ) ) {
		//define( 'WP_POST_REVISIONS', true );
		define( 'WP_POST_REVISIONS', false ); //禁用版本修订
	}

禁用自动草稿(auto-draft)

自动草稿(auto-draft)是在WordPress3.0之后新增的功能,在点开新建文章后(不确定是否只是这种情况)自动保存的草稿,会被WordPress定期清除,但占据的ID也随之失去。这个功能也没有太大的用处,属于鸡肋功能。

5、wp-admin\includes\post.php文件,搜索$create_in_db

// 修改前
	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 );
		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' ) );
		}
	// 修改后
	if ( $create_in_db ) {
	  global $current_user;
	  global $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 );
	  }
	  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' ) );
	}


已知问题:1、文章更新后数据库会wp_posts表产生一行post_status为inherit的数据,是文章更新的留档,如果要被更新文章ID后没有文章(是最后一个id),再次新建文章后此条会被新文章替换。

但是如果要更新的文章id后还有其他文章,那么这条数据会被保留,占用一个最新的id值,新建文章不会被替换。

2、新建一个文章,会创建一个空的自动草稿,如果文章没保存直接返回,此条仍会保留,新建文章发布后,此条草稿会被直接替换成新发布的文章。如果是更新文章,会被替换成inherit留档。

本文标题:给WP禁用自动保存和自动草稿
本文链接:https://gitoscc.com/?id=629
作者授权:除特别说明外,本文由 Git开源网 原创编译并授权 Git开源网_git开源代码资源网_git开源博客 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
点击这里复制本文地址 以上内容由Git开源网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

Git开源网_git开源代码资源网_git开源博客 © All Rights Reserved.  本站所上传资源,只用于交流学习所用。本站资源收集于网络以及网友投稿,其版权归原创者所有,如有侵害到你的权益,或有不妥之处,请联系我们删除,敬请谅解。
Copyright © Git开源网 All rights reserved. 黑ICP备18006154号-1 由ZBlog驱动

知道创宇云安全
网站管理