wordpress禁止自動草稿及歷史版本保持文章ID連續的方法


通過該方法,可以實現Wordpress不禁止自動保存草稿功能,卻不生成垃圾數據並保持wordpress文章ID的連續性。
1)禁用WordPress歷史修訂版本
在wordpress的程序根目錄,配置文件wp-config.php中,找到

define ('WPLANG', 'zh_CN');


在下面加入如下代碼:

/**  * WordPress 編輯器自動保存和歷史版本選項。  *  * 本項注釋掉即可開啟。  */
define('WP_POST_REVISIONS', false);//禁用歷史修訂版本
define('AUTOSAVE_INTERVAL', 86400);//設置自動保存時間設置為一天


簡單說明下這第二條:比如你在后台添加文章的時候,當輸入標題,切換到內容輸入時,系統會自動保存成草稿。當你編輯時,也會定時保存一下,防止你正在編輯的內容丟失。這個草稿是在后台可見的。所以這條根據你的需求來定。如果你想保留文章自動保存功能,你可以加上第二條。當然,你也可以直接無視它,按WordPress默認的自動保存來。其實我是建議把自動保存功能完全禁用掉,真是個煩人的東西,有時候自動草稿都能被搜索引擎收錄,真是無語。


2)禁用WordPress自動保存功能
直接說方法了,首先打開如下兩個文件
wp-admin/post-new.php

wp-admin/post.php
注釋掉這行:

//wp_enqueue_script('autosave');

 
接下來,打開wp-admin/includes/post.php,374行開始,有個if判斷如下

    if ( $create_in_db ) {
        $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不連續的隱形殺手,之后我會專門介紹清理WordPress垃圾數據和完美解決文章ID不連續問題的辦法。
言歸正傳,我們直接將上面代碼替換成

if ( $create_in_db ) {
global $wpdb;
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 post_date ASC, 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 {


原理及說明:當數據庫中有一條或多條狀態為”auto-draft”的自動草稿時,取ID最小的,新文章即使用此條記錄。如果沒有此種類型的數據,才會新插入一條數據。並且查詢數據時是根據當前的用戶來判斷,不會出現多用戶時出錯。這樣就可以避免了自動草稿(auto-draft)的冗余垃圾數據。保證了日志ID的連續性。但最后我要提醒一句,如果你在日志中添加了附件,如圖片,那么該圖片也會占用一條數據,即一個連續的ID,所以,如果你以ID形式,發現日志有時候不是連續的ID了,那么,有可能是你日志的附件占用了臨近的ID。

 

注:如果修改wordpress代碼后,出現500狀態碼等問題,請在wordpress的程序根目錄,配置文件wp-config.php中,找到

define('WP_DEBUG', false);

將其注釋掉,並添加如下代碼:

// define('WP_DEBUG', false);
define('WP_DEBUG', true);

開啟wordpress 自帶的debug功能,查找出錯原因與位置。


附:關於其它禁用自動草稿方法的說明
現在網上很常用的一個禁用自動草稿方法就是在如下代碼

if ( $create_in_db )


前加上

$create_in_db = false;


這種方法很方便,也解決了文章發布按鈕一閃一閃的問題。貌似很完美,其實還有一個嚴重的問題,就是你在添加新文章的時候,如果有自定義欄目,字段內容將保存不了,還會在postmeta表中插入一條無效數據,只有你重新編輯才能保存,所以還是建議采用我的這種方法,可以完美解決,覺得有用的要支持一下哦!
更新(2011-03-21):WordPress 3.1禁用歷史修訂版本及自動草稿(auto-draft)的方法
更新(2011-04-29):WordPress 3.1.2禁用歷史修訂版本及自動草稿(auto-draft)的方法
a)禁用WordPress3.1歷史修訂版本
此步同上面的WordPress3.01禁用歷史修訂版本方法一樣,就不多作說明了。
b)禁用WordPress3.1自動保存功能
還是打開如下兩個文件
wp-admin/post-new.php(約36行)

wp-admin/post.php(約176行)
分別注釋掉這行即可:

//wp_enqueue_script('autosave');


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM