博客文章固定链接我用的是数字型/archives/%post_id%,因为链接比较简短,但有一个问题,发布过的文章的ID默认不连续,原因有如下:

  • 历史修订版本 Post Revisions
  • 自动保存草稿 Auto-Draft
  • 自动保存功能 Auto-Save

登陆phpMyAdmin数据库可查看占用的数据

post revisions在wp_posts里post_type的属性下可以看到Revisions。

auto_draft在wp_posts里post_status的属性下可以看到auto_draft,属性值draft好像也是,在Wordpress新建文章,空白内容关闭后会生成一个这样一条数据。

Auto-Save,产生的数据我没有在数据库找到,所以把前两个关闭就行了,能很大程度上减少数据库垃圾的生成,应该也能文章ID连续起来。

首先如果数据库里有很多这样的数据的话,可以先删除再关闭,删除前请备份数据以免出错。

删除历史修订版本和自动保存草稿功能方法如下:

删除历史修订版本,在phpMyAdmin数据库的命令窗口输入以下命令执行。DELETE FROM `wp_posts` WHERE `post_type` = 'revision';

删除自动保存草稿,命令和上面一样,把路径修改成对应的即可。

历史修订文章和自动保存草稿我并没有删除,因为数据不多,懒得折腾了。删除后产生的很多空余的文章id也能重新利用。方法请查看文末参考资料。

关闭历史修订版本和自动保存草稿功能方法如下:

方法1:将以下代码插入网站根目录下的wp-config.php文件中。(选择其中一种即可)

//禁用自动保存define(‘AUTOSAVE_INTERVAL’, false);

//设置自动保存间隔/秒define(‘AUTOSAVE_INTERVAL’, 120);

//禁用文章修订define('WP_POST_REVISIONS', false);

//设置修订版本最多允许几个define('WP_POST_REVISIONS', 3);

方法2:在当前使用的主题 functions.php 文件添加代码

A. 禁用 WordPress 自动保存

//禁用自动保存(方法1)
add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );

//禁用自动保存(方法2)
add_action('wp_print_scripts', 'fanly_no_autosave');
function fanly_no_autosave() { wp_deregister_script('autosave'); }

B. 禁用 WordPress 修订版本

//禁用所有文章类型的修订版本
add_filter( 'wp_revisions_to_keep', 'fanly_wp_revisions_to_keep', 10, 2 );function fanly_wp_revisions_to_keep( $num, $post ) { return 0;}

//禁用某种文章类型的修订版本add_filter( 'wp_revisions_to_keep', 'fanly_wp_revisions_to_keep', 10, 2 );function fanly_wp_revisions_to_keep( $num, $post ) {if ( 'post_type' == $post->post_type ) { //引号中post_type改为你想禁用修订版本的文章类型return 0;}return $num;}

我用的是方法2,因为我的子主题不会随系统更新而修改,避免以后麻烦,经过我测试,文章依然能自动保存,但数据库里已经不占用新的id了,打开已经发布的文章,里面历史修订版本也没有了,修改内容保存,数据库也不占用新的id了。完美,就看以后文章id能不能连续了。

参考资料

  1. WordPress禁用并删除修订版本和草稿,附WordPress数据库清理优化插件
  2. WordPress折腾小记:彻底解决ID不连续的问题