很多站长朋友在使用WordPress的时候,发现发布的文章并不连续。当你发布一篇文章ID是1,但是发布第二篇文章ID是3,或者4,甚至可以排到几千,这是为什么呢?
这是因为我们使用了
/%post_id%.html
这种固定连接形式,包括星速云,也是使用这种形式的ID,所以可以看到很多文字依次发布,但ID却不是连续的。
WordPress 在设计之初,并没有考虑到图片附件、自动保存、草稿等都会占用ID,致使文章ID不连续。
老版本编辑器的Wordpress可以在发文的时候修改固定连接,这种方法虽然有效,但是很麻烦,不可能每篇都做这样的操作。
禁用修订版
在Wordpress 3.0之后的版本,都会帮你保存修改之前的文章,这个功能在发表文章的时候,使得Wordpress占用了两个ID。修订版是一个ID,实际发布的文章又是一个ID。通过禁用自动保存草稿,来防止多个ID的生成。
方法1在 wp-config.php文件中添加:
define('WP_POST_REVISIONS', false);
方法2在当前主题的functions.php添加
// 禁用修订版本,2015年3月5日更新 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; }
删除文章修订版
当你禁用了修订版,但数据库中依然还保留这之前创建过的修订版,这些创建过的修订版同样占用这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';
执行后即可删除所有的文章修订版。
删除没用的图片和附件
当你打开媒体库,你会发现这些图片,视频音乐等附件,同样占了一个ID,它们与文章都保存在同一个数据库表wp_posts中。如果你特别追求文章的ID一定要完美无缺地连续,请不要在发布文章的时候上传/插入这些媒体,并请在WordPress管理后台 – 媒体库中,删除之前上传的媒体(注意这个操作不只是删除记录,而且会删除你上传的文件),所以不建议删除。
禁用自动保存
自动保存的草稿也会占一个ID,我们需要把自动保存禁掉。
在当前主题的functions.php中添加以下代码:
// 禁用自动保存,所以编辑长文章前请注意手动保存。
add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );
重新排列顺序
在当前主题的functions.php中加入以下PHP代码:
// 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' );
单纯发文章,不发页面,不添加菜单,不上传媒体的话,基本上此后的文章ID是连续的,而且不改变之前已经发布的文章ID。
总结
让ID顺序有序排列,其实是一种强迫症心理作祟,为了这种二追求连续而强迫修改。不如弃用 WordPress 改用其他相关程序。
只要文章质量高,其实连续不连续都无所谓。