解决 WordPress 3.3 文章修订问题
2018-09-14

最近为客户定制WordPress主题的过程中,客户要求禁用WordPress的自动保存草稿功能,网上搜索了一下,大部分都是针对WordPress 3.0及以下版本的,对最新的WordPress 3.3.1根本不适用,也没有找到相关插件。客户有需求,偶米工作室就要提出解决方案,这不,下面通过简单修改WordPress文件的方法即可解决自动保存草稿的问题。精彩即将呈现,请勿走开…

1、修改主题中的functions.php
在主题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');
}

2、禁用自动保存功能
找到<WordPress安装目录>\wp-admin\post-new.php和wp-admin\post.php这两个文件,将下面这段语句注释掉(在语句前面添加两个斜杠“/”即可)。

wp_enqueue_script('autosave');

3、关闭历史版本功能
打开 wp-config.php 文件,搜索 “$table_prefix = ‘wp_’;” ,在前面添加下面两段代码:

define('WP_POST_REVISIONS', false);
define('AUTOSAVE_INTERVAL', false);

4、关闭自动草稿功能
找到并打开 wp-admin\includes\post.php 文件,搜索 “if ($create_in_db) {” ,将如下代码:

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 {

替换为:

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

以上代码的作用是在添加新文章时自动获取最早的一条自动草稿提供给当前文章使用,并去除了删除7天前自动草稿的功能,如此一来便能实现在原有自动草稿功能基础上保持文章ID连续。

5、清理冗余的历史版本
登陆phpMyAdmin,进入数据库,选择wp_post表。先清理下冗余的历史版本,语句如下:

DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision';

到此为止,已经解决了 WordPress 3.3.1 版本自动保存草稿和文章ID不连续的问题。
至于如何将已发布文章的ID重新排序,网络上有很多介绍,自己去琢磨吧。

相关知识