WordPress中文章ID不連續問題怎麼解決?以下這篇文章跟大家分享下WordPress完美解決文章ID不連續問題的方法,希望對大家有幫助!
有很多WordPress部落格的固定連結中使用了文章ID,但是WordPress由於種種原因導致了文章ID不連續的問題,也經常有博友在論壇中提問要解決這個問題,但是很少能夠得到他們滿意的答案。
今天我就來告訴你如何完美的解決這個問題,說是完美,可能有點過了,WordPress 3.0 之後的版本都會有個自動草稿,每發表一篇文章就會佔兩個ID號,目前還沒有禁用的方法。也請繼續往下看如何一定程度解決文章ID不連續的問題。
當然如果你的固定連結中沒有使用post ID,那麼對你來說文章ID是透明的,無關緊要。即使固定連結中用了post ID,如果你不是特別在意,連不連續也是無關緊要的,本文對你來說也沒太大意義了。
一、禁用文章修訂版
所謂的文章修訂版就是你每次修改一次文章,它都會自動幫你保存修改之前的文章版本,專業術語叫做版本控制,這樣保證了在誤修改的情況下可以還原之前的內容,這個在維基文檔的維護方面是有很大幫助的,但是作為我們的小博客,似乎沒多大用處,而且這個修訂版在資料庫中是佔據一個ID的,這也是導致文章ID不連續的問題之一。若要停用文章修訂版,可以在wp-config.php檔案中新增:
define('WP_POST_REVISIONS', false);
也可新增目前主題的functions.php新增下列PHP程式碼:
// 禁用修订版本,2015年3月5日更新 add_filter( 'wp_revisions_to_keep', 'specs_wp_revisions_to_keep', 10, 2 ); function specs_wp_revisions_to_keep( $num, $post ) { if ( 'post_type' == $post->post_type ) $num = 0; return $num; }
二、刪除文章修訂版
禁用了文章修訂版之後,資料庫中還是保存著先前已經建立的文章修訂版,這些其實已經沒多大用處,而且佔著ID,我們可以刪除它。至於怎麼刪除,可以在phpmyadmin 中執行以下SQL語句(會影響置頂文章,慎用!並且做好備份):
DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision';
三、刪除不必要的附件
我相信很多博友在發布文章都會同時上傳/插入一些附件,如圖像、視頻、音樂等,這些附件可以在WordPress管理後台- 媒體庫中看到,不同媒體對應了不同的文章。但你要注意的是這些媒體也是佔據著文章ID的,它們與文章都保存在同一個資料庫表wp_posts中。如果你特別追求文章的ID一定要完美無缺地連續,請不要在發布文章的時候上傳/插入這些媒體,並請在WordPress管理後台- 媒體庫中,刪除之前上傳的媒體(注意這個操作不只是刪除記錄,而且會刪除你上傳的檔案),需要的話請用FTP重新上傳這些檔案。
四、停用自動儲存
自動儲存的好處是你在編輯文章的時候,每隔一小段時間系統會自動幫你儲存編輯的文章,防止網頁突然關閉,導致之前寫的幾千字嘩啦一下全沒了。缺點是每篇都文章都會有一個自動儲存的記錄,同樣佔據一個文章ID,也是文章ID不連續的原因之一,如果你不需要這個功能,可以在目前主題的functions.php中加入以下程式碼:
// 禁用自动保存,所以编辑长文章前请注意手动保存。 add_action( 'admin_print_scripts', create_function( '$a', "wp_deregister_script('autosave');" ) );
五、重新排列不連續的文章ID
方法一:可在目前主題的functions.php中加入下列PHP程式碼,這樣如果你只是單純發文章,不發頁面,不添加菜單,不上傳媒體的話,基本上此後的文章ID是連續的,而且不改變之前已經發布的文章ID,不影響SEO:
// WordPress 3.8测试有效 function keep_id_continuous(){ global $wpdb; // 删掉自动草稿和修订版 $wpdb->query("DELETE FROM `$wpdb->posts` WHERE `post_status` = 'auto-draft' OR `post_type` = 'revision'"); // 自增值小于现有最大ID,MySQL会自动设置正确的自增值 $wpdb->query("ALTER TABLE `$wpdb->posts` AUTO_INCREMENT = 1"); } add_filter( 'load-post-new.php', 'keep_id_continuous' ); add_filter( 'load-media-new.php', 'keep_id_continuous' ); add_filter( 'load-nav-menus.php', 'keep_id_continuous' );
如果你使用了置頂文章、選單和父子頁面等功能,以下的方法失效:
方法二:完成以上幾步,基本上可以保證以後發布的文章ID都會是連續的了,但是之前已經發布的文章ID還是一片混亂,得把他們重新排列,以保證是ID是連續的。我寫了一個PHP腳本,你可以通過以下網址下載,下載後用文本編輯器打開,根據開頭的說明修改數據庫信息,然後將該PHP文件上傳至你的博客空間,運行一下看到OK就可以了,你可以到phpmyadmin中查看wp_posts表中的id是不是連續的了。還是那句話,開始之前請先備份你的資料庫。 (如果你使用了post id作為固定鏈接,那麼將可能改變所有文章的網址,會影響搜尋引擎收錄;如果你用的插件建立了新的資料庫表,如投票插件等,也會出現問題;如果你的部落格中創建了父子關係的頁面,運行了以下腳本將會失去此關係。 推薦學習:《
WordPress教學