WP官方開發的時候,在Wordpress後台編輯、修改文章。都會在一定時間保存一下之前文章修訂版本,以便在不可抗力的情況下,可以快速的找回之前的數據。但這個功能會增加冗餘數據,影響服務器性能,拖慢程序的運行。
可以使用以下方法禁用相關功能
方法一、通過修改 WordPress 程序根目錄下wp-config.php配置文件實現功能禁用
打開根目錄下的 wp-config.php 文件,在 “define(‘WP_DEBUG’, false);
” 後邊添加下面的兩行代碼:
-
/** WordPress 編輯器關閉自動保存和曆史修訂版本選項。 本項注釋掉即可開啓。 */
-
define(‘WP_POST_REVISIONS’, false);//禁用曆史修訂版本post_revision
-
define(‘AUTOSAVE_INTERVAL’, 86400);//設置自動保存時間設置爲一天
控制修訂版本和自動保存的設置
-
// 不保存任何版本(除了自動保存的版本)
-
define(‘WP_POST_REVISIONS’, false);
-
//保存所有修訂版本
-
define(‘WP_POST_REVISIONS’, true);
-
// 保存 n 個修訂版本
-
define(‘WP_POST_REVISIONS’, n);
-
-
//禁用自動保存間隙時間
-
define(‘AUTOSAVE_INTERVAL’, false);
-
//自動保存10小時一次
-
define(‘AUTOSAVE_INTERVAL’, 36000);
-
//設置自動保存間隔/秒
-
define(‘AUTOSAVE_INTERVAL’, 120);
爲什麽選擇10小時自動保存一次而不是直接false?
因爲在測試的時候發現直接 false 禁用無效,所以後來索性将自動保存的時間間隔設置成了36000,這樣無論你編輯多長時間都不會産生ID了。
因爲修改成false以後會造成WordPress報錯的一個bug,開啓debug可以在編輯文章時看到提醒。編輯一篇文章一般都不會超過10小時,所以效果是一樣的,杠杠滴。
方法二、找到 wp-includes/defaut-contants.php
文件,修改如下代碼:
注意:下次升級WordPress程序時,更新後會導緻代碼被覆蓋掉,需要重新添加。
-
//禁用版本修訂曆史和自動保存
-
// 修改前
-
if ( !defined( ‘AUTOSAVE_INTERVAL’ ) )
-
define( ‘AUTOSAVE_INTERVAL’, 60 ); //這個是自動保存
-
if ( !defined(‘WP_POST_REVISIONS’) )
-
define(‘WP_POST_REVISIONS’, true ); //這個是版本修訂曆史
-
-
// 修改後
-
if ( !defined( ‘AUTOSAVE_INTERVAL’ ) )
-
define( ‘AUTOSAVE_INTERVAL’, false ); //禁用自動保存
-
if ( !defined(‘WP_POST_REVISIONS’) )
-
define(‘WP_POST_REVISIONS’, false ); //禁用版本修訂曆史
其中 autosave 的60爲自動保存時間間隔,單位爲s,可以修改爲更大的數值或修改爲false禁用。
以上二種方法并沒有 完全禁用掉自動保存 。因爲在沒有點擊“更新”文章之前就離開編輯的頁面時,會彈出“系統可能不會保存你所做的更改”的提示窗口。所以還需要修改 wp-admin/post-new.php和wp-admin/post.php 這兩個文件。将這兩個文件中的 wp_enqueue_script( 'autosave' );
注釋掉。其中post.php還要把前面一行的if語句注釋掉。
打開 wp-admin/post.php
文件,搜索并注釋
-
//if ( ‘attachment’ !== $post_type )
-
// wp_enqueue_script(‘autosave’);
打開 wp-admin/post-new.php
文件,搜索并注釋
//wp_enqueue_script( 'autosave' );
方法三、當前使用主題文件夾下的 functions.php 文件php結束标記 ?> 前加上如下代碼
-
//禁用文章自動保存(方法一)
-
add_action( ‘admin_print_scripts’, create_function( ‘$a’, “wp_deregister_script(‘autosave’);” ) );
-
//禁用文章自動保存(方法二)。注:方法一與方法二任選其一
-
add_action(‘wp_print_scripts’,‘fanly_no_autosave’);
-
function fanly_no_autosave(){
-
wp_deregister_script(‘autosave’);
-
}
-
//禁用文章修訂版本
-
add_filter( ‘wp_revisions_to_keep’, ‘fanly_wp_revisions_to_keep’, 10, 2 );
-
function fanly_wp_revisions_to_keep( $num, $post ) { return 0;}
另外你如果有自己定義的文章類型,可以使用下面這段代碼來禁止特定文章類型的修訂版本。
-
//隻禁用某種文章類型的修訂版本
-
add_filter( ‘wp_revisions_to_keep’, ‘fanly_wp_revisions_to_keep’, 10, 2 );
-
function fanly_wp_revisions_to_keep( $num, $post ) {
-
if ( ‘post_type’ == $post->post_type ) { //post_type爲你要禁止修訂版本的文章類型
-
return 0;
-
}
-
return $num;
-
}
下面是Wordpress中幾種類型
文章(Post Type: ‘post’ )
頁面(Post Type: ‘page’ )
附件媒體(Post Type: ‘attachment’ )
修訂版本(Post Type: ‘revision’ )
導航菜單( Post Type: ‘nav_menu_item’ )
溫馨提示:不少WordPress用戶會使用在wp-config.php添加相關代碼來禁用自動保存和修訂版本,但就個人的使用情況來看效果并不理想,具體原因尚不明确。
方法四、使用“ Super Switch ” 插件禁止修訂版本和自動保存
1、在 “安裝插件”頁面的搜索框中,輸入 Super Switch ——》 回車 ——》 找到 Super Switch ——》 點擊“現在安裝” ——》 啓用“ Super Switch ” 插件。
WordPress文章禁用自動草稿(auto-draft)功能
打開 wp-admin/includes/post.php ,找到如下代碼:
-
/*
-
$post_id = wp_insert_post( array( ‘post_title’ => __( ‘Auto Draft’ ), ‘post_type’ => $post_type, ‘post_status’ => ‘auto-draft’ ) );
-
$post = get_post( $post_id );
-
*/
這段代碼很簡單,先是清除七天以前的自動草稿,然後插入一條新草稿,如果你繼續寫文章并發布,那麽這條草稿就被使用了,包括在後台首頁有一個快速發布,也用到了這個。而很詭異的是,如果你後台點了“寫文章(添加文章)”,沒有輸入任何内容或到别的頁面或是關閉了,此時仍然會生成一個自動草稿,而這個草稿,是後台不可見的,是垃圾數據,隐形的禍害,也是造成文章ID不連續的隐形殺手。
将其注釋,并添加以下代碼:
-
/* 修改開始*/
-
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 );
-
}
-
/* 修改結束 */
當數據庫中有一條或多條狀态爲”auto-draft”的自動草稿時,取ID最小的,新文章即使用此條記錄。如果沒有此種類型的數據,才會新插入一條數據。并且查詢數據時是根據當前的用戶來判斷,不會出現多用戶時出錯。這樣就可以避免了自動草稿(auto-draft)的冗餘垃圾數據。保證了日志ID的連續性。但最後我要提醒一句,如果你在日志中添加了附件,如圖片,那麽該圖片也會占用一條數據,即一個連續的ID,所以,如果你以ID形式,發現日志有時候不是連續的ID了,那麽,有可能是你日志的附件占用了臨近的ID。
PS:這裏,之所以使用post_date排序,是因爲自動草稿超過七天後會自動删除。所以,先使用比較舊的記錄。
評論0