改善 WordPress 3.2.1 文章 ID 無法連續的問題

首頁部落格記事WordPress改善 WordPress 3.2.1 文章 ID 無法連續的問題

對於一個調整汽車音響の音量都一定要控制在偶數的人來說,絕對沒有辦法忍受 WordPress 文章 ID 無法連續的問題。沒錯,這個有強迫症的傢伙正是無法顯示網頁我本人,打從 WordPress 2.6 加入文章自動儲存(Autosave)及文章版本控制(Post Revisions)的功能以來,無法顯示網頁就很受不了每次寫文章的時候,Wordpress 很雞婆地自動幫你把文章另外存成多個版本,間接造成該篇文章跟下一篇文章的 ID 不再是連續的數字。

先前使用 WordPress 2.6 的時候,無法顯示網頁只要在 wp-config.php 裡頭使用語法把文章自動儲存的時間延長並將文章版本控制的功能整個關掉就可以解決文章 ID 無法連續的問題。不過到了 WordPress 3.2,發表文章又開始發生 ID 無法連續的問題,觀察了很久我發現延長文章自動儲存時間及關閉文章版本控制這兩個語法似乎還是能夠正常的工作,且 WordPress 後台完全都沒有任何異狀?不過不曉得為什麼文章的 ID 就是無法連續?

好奇心的驅使下,無法顯示網頁使用 phpMyAdmin 進去資料庫觀察 wp_posts 這張資料表,很奇怪?無法顯示網頁只要在 WordPress 後台新增一篇文章,就算不儲存也不發表直接離開,wp_posts 資料表居然還是會多一筆 post_title 為 Auto Draft 的資料?而這筆資料在 WordPress 後台還看不到?看來 … 占用 ID 的罪魁禍首就是這個鬼東西吧?

為了改善這個問題,無法顯示網頁在 Google 上面找了很久才找到這個解決方法,測試過後真的有用唷!在此分享給有需要的朋友,如果你也跟無法顯示網頁一樣非常痛恨 WordPress 偷你的文章 ID,趕快試試吧!首先,請用文字編輯軟體把 WordPress 這個 /wp-admin/includes 路徑下的 post.php 打開,找到第 418 行的地方:

if ( $create_in_db ) {
	// Cleanup old auto-drafts more than 7 days old
	$old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft' AND DATE_SUB( NOW(), INTERVAL 7 DAY ) > post_date" );
	foreach ( (array) $old_posts as $delete )
		wp_delete_post( $delete, true ); // Force delete
	$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
	$post = get_post( $post_id );
	if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )
		set_post_format( $post, get_option( 'default_post_format' ) );
} else {

將上面那段程式碼 418~427 換成下面這段程式碼。

if ( $create_in_db ) {
    global $current_user; // 取得目前的使用者
    $post = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY ID ASC LIMIT 1" ); // 取得第一個 Auto Darft
    if ( !$post ) {
        $post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
        $post = get_post( $post_id );
    }
    if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )
        set_post_format( $post, get_option( 'default_post_format' ) );
} else {

完成,從現在開始您已經徹底擺脫 WordPress 3.2.1 文章 ID 無法連續的問題囉!對了,這段程式碼的意思是讓 WordPress 在每次新增文章的時候,自動去資料庫撈最早的 Auto Draft 給目前的文章使用,而不是無止境的一直新增 Auto Draft …

報告完畢。


您也許對這些文章也感興趣:

最後更新日期: 2023-04-02


留言

在〈改善 WordPress 3.2.1 文章 ID 無法連續的問題〉中有 12 則留言

  1. 「白色飛魚」的個人頭像

    喔,我是偏好將汽車音響的音量控制在奇數。 :mrgreen:

    1. 「無法顯示網頁」的個人頭像

      哈哈哈哈哈 … 那飛魚大哥按電視的遙控器音量也是會控制在奇數嗎?

  2. 「小胖」的個人頭像

    哈哈!
    看來我最隨和了,音量順耳就好囉~~ XD

    1. 「無法顯示網頁」的個人頭像

      其實 … 其實我也想要改掉這個莫名其妙的堅持呀! 😆

  3. 「olivia」的個人頭像
    olivia

    有看沒有懂的歐巴桑, 如果你用錢來說明可能應該還是不懂,但至少會懂錢是何物….

    ps 剛打錢是何物 出現前世和誤…….

    1. 「無法顯示網頁」的個人頭像

      哈哈哈哈哈 … 有機會再向你慢慢解釋! 😉

  4. 「Jin Huang」的個人頭像
    Jin Huang

    還有一個更快的方法…不要用ID 😈
    那不是好的SEO方法…. 😆

    1. 「無法顯示網頁」的個人頭像

      沒辦法,頭都已經洗下去了~ 唉~

  5. 「阿閎」的個人頭像
    阿閎

    真的是跟我一樣無法接受沒有ID連續的問題XD
    但是方法感覺好困難… 😐

    1. 「無法顯示網頁」的個人頭像

      唷吼!好久不見~
      阿閎你都寒暑假才有出現吼? :mrgreen:

  6. 「雷东升」的個人頭像

    谢谢博主的分享,我也有这种洁癖,wordpress的自动保存和版本控制也让我很抓狂

  7. 「荣耀博客」的個人頭像

    如果我清理了修订版和自动保存的文章,新建文章还会不会使用之前没有使用的文章id呢?

發佈留言