對於一個調整汽車音響の音量都一定要控制在偶數的人來說,絕對沒有辦法忍受 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 …
報告完畢。
發佈留言