wordpress后台编辑文章或修改文章时经常自动保存,每一次编辑文章或更新都会写入数据中,并生成新的文章id,例如你新发布的文章是123.html,再重新修改这篇文章时可能会生成id124,自动草稿id125并写入数据库中,下次再发布一篇内容时id可能就是126.html而不是连续性124.html

wordpress文章编辑发布,修改都会留下版本修订历史,自动保存,自动草稿等数据。而且自动保存生成多余的文章ID链接在文章编辑后台是看不到的,在数据库mysql看的到。自动保存的好处是不小心关闭刚编辑的页面不会丢失文章内容,缺点是会在数据库产生很多无用的数据id,从而拖慢网站的速度。
1、可以在你当前使用主题的functions.php文件php结束标记 ?> 前加上如下代码
//禁用文章自动保存
add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );
//禁用文章修订版本
add_filter( 'wp_revisions_to_keep', 'specs_wp_revisions_to_keep', 10, 2 );
function specs_wp_revisions_to_keep( $num, $post ) {
if ( 'post_type' == $post->post_type )
$num = 0;
return $num;
}
2、在后台写文章时,会有两个自动草稿,每点击一次“写文章”会新增一个自动草稿,之前自动新增的自动草稿,WordPress就无法读取原来的自动草稿,所以导致数据库产生了垃圾数据和文章ID不连续。

解决办法:在文件管理找到/wp-admin/includes/post.php文件,大概在第683行到第692行的代码,如下图所示:
$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 );
替换成以下代码并保存文件:
$posts = query_posts(array(
'post_status' => 'auto-draft',
'post_type' => $post_type,
'posts_per_page' => 1
));
if ($posts) {
$post = get_post($posts[0]->ID);
} else {
$post_id = wp_insert_post(array(
'post_title' => __('Auto Draft') ,
'post_type' => $post_type,
'post_status' => 'auto-draft',
));
$post = get_post($post_id);
}
上面代码是允许保存自动草稿,如果数据库中已有自动草稿,下次写文章时,自动加载原来的自动草稿用作新文章ID,以最大限度的保证文章ID连续性。WordPress版本升级后,需要再次修改此文件,个人不建议删掉自动保存的草稿和修订版。


评论