程序员博客

Menu

解决WordPress文章修订版本导致ID不连续

        WordPress是站长们熟悉的cms建站系统,它的基础功能就很强大,特别是深受博客爱好者青睐,写博年数较长的朋友们一定发现,文章的id编号很多都没有使用或者出现断续,究其原因这是WordPress的自动保存和修订版本功能导致的,既然发现了问题所在。

什么是自动保存功能?

      WordPress自动保存功能可防止意外情况下关闭编辑器而导致文章内容丢失,比如突然断网、突然断电等特殊情况,好不容易编辑好的文章,一下就没了,但是,这个功能会让数据库虚胖起来,无故增加了不少无用垃圾。幸好有个插件WP Clean Up能删除这些垃圾,这种减肥的过程是很痛苦的,不如根治虚胖症来的省事,下面就是祖传秘方了。

//代码放入主题模板文件functions.php中
//禁用文章自动保存
add_action('wp_print_scripts','disable_autosave');
function disable_autosave(){
wp_deregister_script('autosave');
}

自动保存和自动草稿的区别

      WordPress还有一个非常讨厌的功能就是自动草稿。自动草稿和自动保存有点相似,自动保存是你在写文章的时候,系统会根据时间间隔自动对文章进行备份并写入数据库;而自动草稿是当你点击“写文章”那一刻起,一个新的数据已经写入数据库,不管你后面是否有录入内容,哪怕是你退出编辑器。

修订版本功能

      修订版本功能其实还是挺有用的,方便用户查阅修改内容,做好版本控制。事物总是有两面,跟自动保存功能一样,忽视了修订版本都会给数据库带来不必要的负担。下面这段代码解决这个问题,老样子,还是放到主题模板文件functions.php即可。

//禁用文章修订版本
add_filter( 'wp_revisions_to_keep', 'specs_wp_revisions_to_keep', 10, 2 );
function specs_wp_revisions_to_keep( $num, $post ) {
return 0;
}

删除文章修订版

禁用了文章修订版之后,数据库中还是保存着之前已经创建的文章修订版,这些其实已经没多大用处,而且占着ID,我们可以将它删除。至于怎么删除,可以在 phpmyadmin 中执行以下SQL语句(会影响置顶文章,慎用!并做好备份):

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

方法一:可在当前主题的functions.php中加入以下PHP代码,这样如果你只是单纯发文章,不发页面,不添加菜单,不上传媒体的话,基本上此后的文章ID是连续的,而且不改变之前已经发布的文章ID,不影响SEO:

// WordPress 3.8测试有效
function keep_id_continuous(){
  global $wpdb;
  // 删掉自动草稿和修订版
  $wpdb->query("DELETE FROM `$wpdb->posts` WHERE `post_status` = 'auto-draft' OR `post_type` = 'revision'");
  // 自增值小于现有最大ID,MySQL会自动设置正确的自增值
  $wpdb->query("ALTER TABLE `$wpdb->posts` AUTO_INCREMENT = 1");  
}
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' );

也可以通过修改wp-config文件

//自动保存2小时一次
define('AUTOSAVE_INTERVAL', 36000);
//取消自动修订版
define('WP_POST_REVISIONS',false);

 以上几种方案可以解决此问题带来的困惑,站长朋友们可尝试解决,如有疑问留言沟通。

— 于 共写了1988个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注