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

WordPress 禁用文章修訂與自動保存:非插件、免修改核心代碼的完美方案

     編輯:PHP 相關知識

WordPress 性能優化:徹底禁用修訂版、自動保存、清理數據庫的完整指南

WordPress 預設開啟文章修訂版和自動保存,導致數據庫膨脹、文章 ID 不連續、寫入性能下降。本文提供無需插件、不修改核心代碼、升級不失效的完美解決方案。

方案一:wp-config.php 全局常量(最簡單、最高優先級)

<?php
// wp-config.php 中,require_once ABSPATH . 'wp-settings.php'; 之前添加

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

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

// 3. 禁用自動保存(或修改間隔,單位:秒)
define('AUTOSAVE_INTERVAL', 86400); // 24小時 = 實際禁用
// define('AUTOSAVE_INTERVAL', 120); // 2分鐘

// 4. 強制禁用自動保存腳本(前端)
define('WP_DEBUG', false); // 生產環境關閉調試
?>

優勢:核心代碼最先讀取,優先級最高,主題/插件無法覆蓋,升級完全不受影響。

方案二:主題 functions.php 掛鉤(彈性控制、按文章類型)

<?php
// functions.php

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

// 2. 禁用自動保存腳本(前端不加載 autosave.js)
add_action('wp_print_scripts', 'disable_autosave_script');
function disable_autosave_script() {
    wp_deregister_script('autosave');
}

// 3. 按文章類型禁用(如僅禁用 page 修訂版)
add_filter('wp_revisions_to_keep', 'custom_revisions_to_keep', 10, 2);
function custom_revisions_to_keep($num, $post) {
    if ($post->post_type === 'page') return 0;
    return $num; // 其他類型保持默認
}

// 4. 禁用 REST API 修訂版端點(WP 4.7+)
add_filter('wp_rest_post_types', function($post_types) {
    unset($post_types['revision']);
    return $post_types;
});
?>

方案三:清理現有修訂版與自動草稿(數據庫瘦身)

<?php
// 1. 通過 WP-CLI(推薦,安全高效)
// wp post delete $(wp post list --post_type='revision' --format=ids)
// wp post delete $(wp post list --post_type='auto-draft' --format=ids)

// 2. 通過 phpMyAdmin / MySQL 客戶端(備份後執行)
// 刪除修訂版及其關聯數據
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';

// 刪除自動草稿
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 = 'auto-draft';

// 3. 重置文章 ID 連續性(慎用!會改變所有鏈接、破壞 SEO)
// 僅在全新站點、未被收錄時考慮
// ALTER TABLE wp_posts AUTO_INCREMENT = 1; // 不會重排現有 ID
// 真正重排需複雜腳本,強烈不建議生產環境操作
?>

方案四:禁用媒體附件佔用 ID(可選)

上傳圖片/文件也會佔用 wp_posts ID。若極度追求 ID 連續:

  • 發文時不上傳媒體,改用外部圖床/對象存儲;
  • 媒體庫中刪除無用附件(會物理刪除文件);
  • 或掛鉤過濾:add_filter('wp_insert_attachment_data', fn($data) => $data + ['ID' => null]);(實測不穩定,不推薦)。

驗證生效檢查清單

<?php
// 1. 新建文章,觀察 wp_posts 表
// post_type = 'post',無 revision 記錄

// 2. 編輯文章停留 2 分鐘,不觸發自動保存請求(Network 面板無 admin-ajax.php?action=autosave)

// 3. 數據庫查詢
SELECT post_type, COUNT(*) FROM wp_posts GROUP BY post_type;
// revision 和 auto-draft 應為 0 或極少

// 4. 前端檢查
// 頁面源碼無 autosave.js 載入
?>

常見誤區避雷

誤區後果正確做法
修改 wp-admin/post.php 註釋 wp_enqueue_script('autosave')核心升級覆蓋,維護地獄用 wp-config.php 常量或 functions.php 掛鉤
安裝「禁用修訂版」插件插件衝突、額外開銷、棄維風險幾行代碼解決,無需插件
定義 WP_POST_REVISIONS 後未生效定義位置在 wp-settings.php 之後務必放在 require_once ABSPATH . 'wp-settings.php'; 之前
刪除修訂版後 ID 仍不連續自增 ID 本身不回收,媒體/頁面/菜單也佔用 ID接受 ID 不連續,無實際業務影響

總結:推薦組合拳

  1. wp-config.php 定義 WP_POST_REVISIONS = false、AUTOSAVE_INTERVAL = 86400(核心層面徹底禁用);
  2. functions.php 掛鉤 remove_action('pre_post_update', 'wp_save_post_revision')、wp_deregister_script('autosave')(雙重保險);
  3. 定期用 WP-CLI 清理殘留修訂版/自動草稿;
  4. 接受 ID 不連續,這是資料庫自增主鍵本質,無業務負面影響,SEO 以鏈接為準而非 ID。

此方案零插件、零核心修改、升級無感、性能最優,適合所有 WordPress 站點。

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