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版本升级后,需要再次修改此文件,个人不建议删掉自动保存的草稿和修订版。
评论