WordPress采用MySQL存储,MySQL自增字段有个特性:删除了一行数据后,再次插入新的数据时,自增ID会越过删掉的ID,使用新的ID。
而WordPress的wp_posts表中,经常存放了删除的文章、主题设置、自动保存的草稿,导致了文章ID不连续,这对于强迫症来说是一件非常恐怖的事情...
下面的方法可以通过别名设置永久链接,解决这一问题。
首先修正已保存的文章的别名:
在WordPress的文件夹内,在wp-content/themes找到当前启用的主题,在里面找到functions.php,加入以下代码:
function Change_id(){
query_posts( 'posts_per_page=-1' );
while( have_posts() ){
the_post();
$post_id = $GLOBALS['post']->ID;
wp_update_post( array(
'ID' => $post_id,
'post_name' => $post_id
) );
}
wp_reset_query();
}
if( isset($_GET['changeid']) ) add_action( 'init', 'Change_id' );
然后访问你的主页,地址后面加上“/?changeid”(例如http://blog.example.com/?changeid)
就可以修改你的别名了。这一操作的耗时取决于你的文章数量,可能会比较耗时。
对于新文章,在functions.php加入如下代码:
function change_new_id( $id, $post){
if( $post->post_status != 'publish' ) return;
$action = 'publish_post';
$func = 'change_new_id';
remove_action( $action, $func, 10 );
wp_update_post( array(
'ID' => $id,
'post_name' => $id
));
add_action( $action, $func, 10, 3 );
}
add_action( 'publish_post', 'change_new_id', 10, 3 );
这样就可以使文章别名与文章id保持同步了。如果想设置成连续自动增长,把'post_name'=>$id换成自增数即可。
最后,在后台设置一下永久链接即可: