WordPress解决文章ID不连续的问题

发布于 / 小技巧 / 0 条评论

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换成自增数即可。

最后,在后台设置一下永久链接即可:

深度截图_选择区域_20180804151443.png

转载原创文章请注明,转载自: 斐斐のBlog » WordPress解决文章ID不连续的问题
目前还没有评论,快来抢沙发吧~