文章 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'&&current_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」 不連續了,可以使用上邊的那個批次設定的程式碼重新歸位。