首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

WordPress 禁用文章修訂版與自動保存的最佳實踐:非插件、免修改核心、持久生效

     編輯:PHP 綜合知識

為什麼要禁用?

  • 數據庫膨脹:每次編輯產生一條 `post_type=revision` 記錄,長期積累導致 `wp_posts` 表巨大,備份/遷移/查詢變慢。
  • 自動保存衝突:每 60 秒自動保存草稿 (`auto-draft`),佔用 ID、產生垃圾數據。
  • 性能影響:修訂版查詢、自動保存 AJAX 請求增加服務器負載。

方案一:`wp-config.php` 常量配置 (最推薦、最高優先級、核心層面生效)

在 `wp-config.php` 中 **`require_once ABSPATH . 'wp-settings.php';` 之前** 添加:

<?php
// 1. 完全禁用修訂版
define('WP_POST_REVISIONS', false);

// 2. 或限制修訂版數量 (如保留最近 3 版)
// define('WP_POST_REVISIONS', 3);

// 3. 調整/禁用自動保存間隔 (單位:秒,false 禁用)
define('AUTOSAVE_INTERVAL', 300); // 5分鐘保存一次
// define('AUTOSAVE_INTERVAL', false); // 完全禁用 (WP 5.0+ 可能不完全生效,見下文)

// 4. 禁用圖片編輯創建副本 (節省空間)
define('IMAGE_EDIT_OVERWRITE', true);

優勢:核心加載前生效、無插件依賴、不受主題/插件更新影響、多站點網絡通用。

方案二:主題 `functions.php` 掛鉤 (兼容舊版、精細控制)

<?php
// functions.php

// 1. 移除修訂版保存動作 (WP 3.6+)
remove_action('pre_post_update', 'wp_save_post_revision');

// 2. 禁用編輯器自動保存腳本 (經典編輯器/區塊編輯器通用)
add_action('wp_print_scripts', 'disable_autosave_script');
function disable_autosave_script() {
    wp_deregister_script('autosave');
}

// 3. 區塊編輯器 禁用自動保存 (WP 5.0+)
add_filter('block_editor_settings_all', 'disable_block_autosave');
function disable_block_autosave($settings) {
    $settings['autosaveInterval'] = 0; // 0 表示禁用
    return $settings;
}

// 4. 刪除現有修訂版 (一次性清理,執行後可註釋)
// add_action('init', 'delete_all_revisions_once');
// function delete_all_revisions_once() {
//     global $wpdb;
//     $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
//     // 清理孤立 postmeta
//     $wpdb->query("DELETE pm FROM {$wpdb->postmeta} pm LEFT JOIN {$wpdb->posts} p ON pm.post_id = p.ID WHERE p.ID IS NULL");
//     remove_action('init', 'delete_all_revisions_once'); // 防重複執行
// }

方案三:WP-CLI 批量清理現有修訂版 (生產環境推薦)

# 1. 統計修訂版數量
wp post list --post_type=revision --format=count

# 2. 批量刪除 (跳過垃圾箱,直接刪除)
wp post delete $(wp post list --post_type=revision --format=ids) --force

# 3. 優化數據庫 (清理孤立 meta、碎片整理)
wp db optimize

方案四:插件方案 (非技術用戶/臨時需求)

插件特點適用場景
Disable Post Revision極簡、僅禁用修訂版、無設置頁面只需禁用修訂版
WP Revisions Control按文章類型限制修訂版數量、清理現有需精細控制
Autosave Interval Control調整自動保存間隔、禁用需調整間隔
Optimize Database after Deleting Revisions定時清理修訂版、草稿、垃圾箱、優化表定期維護

深度原理解析:為什麼 `AUTOSAVE_INTERVAL = false` 可能失效?

WP 5.0+ 引入 **區塊編輯器**,自動保存邏輯遷移到前端,由 `@wordpress/edit-post` 包管理。`AUTOSAVE_INTERVAL` 僅影響經典編輯器 (TinyMCE) 的 `autosave.js` 腳本。**區塊編輯器需通過 `block_editor_settings_all` 過濾器設置 `autosaveInterval: 0` 才能真正禁用。**

完整最佳實踐配置 (複製到 `wp-config.php` 即可)

<?php
// === WordPress 性能與存儲優化配置 ===
// 放置在: define('DB_COLLATE', ''); 之後、require_once ABSPATH . 'wp-settings.php'; 之前

// 1. 禁用修訂版 (核心層面)
define('WP_POST_REVISIONS', false);

// 2. 經典編輯器自動保存間隔 (5分鐘,減少頻率)
define('AUTOSAVE_INTERVAL', 300);

// 3. 圖片編輯覆蓋原文件 (不創建副本)
define('IMAGE_EDIT_OVERWRITE', true);

// 4. 禁用文件編輯 (安全加固,防後台主題/插件編輯器被利用)
define('DISALLOW_FILE_EDIT', true);

// 5. 限制媒體上傳大小 (防止巨大文件撐爆存儲,單位字節)
// define('WP_MAX_MEMORY_LIMIT', '256M');

// 6. 強制 SSL 登錄/後台 (生產必開)
// define('FORCE_SSL_ADMIN', true);

// 7. 禁用自動更新核心大版本 (穩定性優先)
// define('WP_AUTO_UPDATE_CORE', 'minor'); // 僅小版本安全更新

// 8. 緩存相關 (需配合對應插件/服務器)
// define('WP_CACHE', true); // 啟用對象緩存 (Redis/Memcached)
// define('WP_REDIS_HOST', '127.0.0.1');
// define('WP_REDIS_PORT', 6379);

驗證生效檢查清單

  1. 編輯文章 → 發布/更新 → 數據庫 `wp_posts` 無新增 `revision` 記錄。
  2. 2. 編輯器停留 2 分鐘 → Network 面板無 `autosave` / `wp-admin/admin-ajax.php?action=autosave` 請求 (區塊編輯器看 `autosaveInterval` 設置)。 3. `wp post list --post_type=revision --format=count` 返回 0 (或不增長)。 4. 圖片編輯裁剪/旋轉 → 原文件被覆蓋,無 `-scaled` / `-e` 後綴副本生成。

核心建議:**`wp-config.php` 定義 `WP_POST_REVISIONS = false` 是唯一必做項**。配合 `functions.php` 禁用區塊編輯器自動保存。定期用 WP-CLI 清理歷史修訂版。拒絕安裝「超級開關」類臃腫插件,核心常量+掛鉤才是 WordPress 之道。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved