文章 ID 不連續是很多 「強迫症」 博主的煩惱,尤其是使用了文章 ID 作為固定連接之後,每篇文章的 ID 並不連續,非常不好。
從原因來看,文章 ID 不連續主要是因為自動保存的文章、媒體、頁面和其它文章類型佔用了 ID 導致的,網上的解決方法一般是強制的禁止自動草稿、不在媒體庫上傳媒體、不建立頁面等等,但這種方法會導致使用上的不便利,而且很有侷限性。
解決方案
本文説的方法也是治標不治本,但卻能比較好的解決鏈接上的 ID 不連續這個問題。這個方法就是利用別名,自動給文章設置一個別名,別名按順序遞增,然後把固定連接設置成別名。
批量設置
首先,如果你之前已經有文章了,需要根據順序設置一下別名,從 1 開始遞增。批量設置別名可以把下邊的代碼添加到 functions.php(瞭解更多) 裏邊:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/** *WordPress 完美解決文章 ID 不連續的問題 *批量設置別名,此代碼使用完後不需要刪除,之後還可能用到 *https://www.weixiaoduo.com/post-id-continuous/ */ functionBing_post_id_continuous_query(){ set_time_limit(0); remove_action('publish_post','Bing_post_id_continuous'); query_posts('posts_per_page=-1'); $arr=array(); while(have_posts()){ the_post(); $post_id=$GLOBALS['post']->ID; $arr[]=$post_id; } wp_reset_query(); $arr=array_reverse($arr); $i=1; foreach($arras$post_id){ wp_update_post(array( 'ID'=>$post_id, 'post_name'=>$i++ )); } } if($_GET['post_id_continuous_query']=='yes'&¤t_user_can('level_10'))add_action('init','Bing_post_id_continuous_query'); |
然後訪問下邊的地址,注意替換成你的域名 (訪問時需以管理員身份登錄):
http://example.com?post_id_continuous_query=yes
文章多的話網頁加載會很慢,耐心等待加載完,加載好後,別名也就批量設置好了。
注意:此代碼用完之後不用刪除,留着之後有可能還需要用。
新文章自動設置
老文章設置好了,接下來就要給新文章自動設置別名了,只需要把下邊的代碼添加到主題的 functions.php 即可:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/** *WordPress 完美解決文章 ID 不連續的問題 *Update: *2014-07-31:讓更新文章時不重新計算別名 *https://www.weixiaoduo.com/post-id-continuous/ */ functionBing_post_id_continuous($id,$post,$update){ if($update||$post->post_status!='publish')return; $action='save_post_post'; $func='Bing_post_id_continuous'; remove_action($action,$func,10); wp_update_post(array( 'ID'=>$id, 'post_name'=>wp_count_posts()->publish+1 )); add_action($action,$func,10,3); } add_action('save_post_post','Bing_post_id_continuous',10,3); |
添加好後,每發佈一篇文章,別名都會自動設置成當前發佈文章的數量加 1.
2014-07-31 更新:讓更新文章時不重新計算別名。
修改固定鏈接
添加完代碼之後,需要在後台的 「設置」 → 「固定連接」 裏設置一下固定連接,把 ID 改成別名,也就是把固定連接裏的 post_id 改成 postname

錯亂
如果因為刪除、更新或者其它原因導致文章的 「ID」 不連續了,可以使用上邊的那個批量設置的代碼重新歸位。