由於haibor有點ID控的概念,喜歡乾淨簡單的東西,所以對於新版的WordPRess的自動保存草稿功能很是鬱悶,它造成了大量的日誌ID浪費,也使得日誌ID不連續,所以,幹掉此功能! !
先說明個情況:ID不連續主要是由仨功能引起的,一是自動保存功能Auto-Save,二是歷史版Post Revisions,三是自動草稿功能Auto-Draft!基於不同wordpress版本,解決方法不一!請對號選擇相應解決方案!
wordpress 3.1 之前版本(不包含3.1):
1、開啟wp-config.php 文件,在「$table_prefix = 'wp_';」前面加入以下程式碼:
define('WP_POST_REVISIONS', false);
define('AUTOSAVE_INTERVAL', false);
2、找到並開啟wp-adminpost-new.php 和wp-adminpost.php 這兩個文件,將其「wp_enqueue_script('autosave');」 註解或刪除掉。
//wp_enqueue_script('autosave');
3.找到並開啟wp-adminincludespost.php 文件,找到「if ($create_in_db ) {」 ,在它的前一行新增:
$create_in_db = false;
wordpress 3.1 之後版本(內含3.1):
自3.1版本開始,程式對自動草稿功能做了修改,上述方法中的第三步會導致後台發佈文章時提示沒有操作權限!
我們首先還是按照上述方法中的1、2兩步驟進行操作,以實現禁止自動保存Auto-Save功能和歷史版本Post Revisions功能,下面我們來嘗試處理一下禁止自動草稿Auto-Draft 功能!
由於上述方法中的第三步失效,所以不能再添加$create_in_db = false; 代碼,此時發布文章功能正常,但只要你點擊“添加新文章”,無論你是否編輯文章,只要你最後沒有點擊保存或點擊存為草稿(如直接關閉編輯頁面),程式都會預設自動添加一篇不可見的自動草稿日誌,其標題為“自動草稿”,狀態為“auto-draft”,且只能利用phpmyadmin從資料庫中刪除!因此,如果你沒有構思好日誌,還是不要輕易點擊新增文章!
以下給出兩種還算完美的解決方案,基礎代碼來自電腦中名為“待處理”的文件夾,已經找不出源出處了,感謝黨,感謝互聯網,感謝原作者!這裡我整理完善一下,分享給各位童鞋,至此,非ID控可以直接跳到下方評論了哈哈! !
註:下文所述的行數以wordpress 3.2 版本為準。
方案一:將不可見的自動草稿auto-draft 變成可見的草稿日誌draft。
參考上述第3步,找到並開啟wp-adminincludespost.php 文件,找到「if ( $create_in_db ) {」 ,找出大約423 行:
$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
將上述程式碼改為:
$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'draft' ) );
提示:此方案並不能阻止點擊「新增文章」時自動建立草稿,但此時建立的是可以在文章清單看到的草稿日誌,可點選編輯!當然,如果你多次點擊新增文章,會產生多個草稿日誌,也不太好看吧哈哈!
方案二:原理是取得最早一條自動草稿作為當前文章使用,如此可以實現在原有自動草稿功能基礎上保持文章ID連續,並去除了刪除7天前自動草稿的功能。
還是找到並開啟wp-adminincludespost.php 文件,找到「if ($create_in_db) {」 ,找出大約418 至427 行:
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" );//刪除7天前自動草稿
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 {
替換為
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" ); //取得最早一則自動草稿
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 {
上面已經說明了方案二的原理,請需要的童鞋結合代碼註釋看,方案二的解決方法是,如果資料庫已經有不可見的自動草稿日誌,那麼點擊新增文章時,將不會再自動產生新的不可見自動草稿,而是直接呼叫最早的一篇不可見草稿作為當前文章所需的資料庫記錄來使用,同時為避免ID不連續,刪除了「刪除早於7天的自動草稿」的代碼語句!
好了,請各位需要的童鞋對號入座吧,如有更好的建議或不解,留言交流!
本文為諾豆網原創,轉載請勿刪除本文連結: http://www.nuodou.com/item/622.html 。
感謝haibor 的投稿