WordPress文章ID连续方法
博客文章固定链接我用的是数字型/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能不能连续了。
参考资料