2026年5月20日

2026年5月20日

WordPressの下書き自動保存(オートセーブ)を無効にする方法

はじめに

WordPressは投稿エディタを開いているあいだ、デフォルトで60秒ごとに自動保存(autosave)を行います。大規模サイトや記事数が多い場合、この頻繁なDB書き込みがパフォーマンスに影響することがあります。完全に無効化するか、間隔を調整する方法を解説します。

自動保存の仕組み

  • ブロックエディタ(Gutenberg): wp-autosave スクリプトが60秒ごとにREST APIへPOSTリクエスト
  • クラシックエディタ: autosave.js が同様にリクエスト
  • 保存先: wp_posts テーブルの post_status = 'inherit' + post_type = 'revision'

間隔を調整する方法(推奨)

wp-config.phpで間隔を延長

// wp-config.php — 自動保存を3分間隔に(デフォルト60秒)
define('AUTOSAVE_INTERVAL', 180);

完全に無効化するより間隔を延ばす方が、クラッシュ時のデータ復元の観点から安全です。

完全に無効化する方法

JavaScriptのautosaveスクリプトを無効化

// functions.php
add_action('wp_enqueue_scripts', function() {
    wp_deregister_script('autosave');
});

// 管理画面のエディタページでも無効化
add_action('admin_enqueue_scripts', function($hook) {
    if (in_array($hook, ['post.php', 'post-new.php'])) {
        wp_deregister_script('autosave');
    }
});

ブロックエディタの自動保存を無効化

// functions.php — Gutenbergの自動保存を無効化
add_filter('block_editor_settings_all', function($settings) {
    $settings['autosaveInterval'] = 0; // 0 = 無効
    return $settings;
});

リビジョンと自動保存を同時に制御

// wp-config.php
define('WP_POST_REVISIONS', 3);    // リビジョンを3件に制限
define('AUTOSAVE_INTERVAL', 300);  // 自動保存を5分間隔に

特定の投稿タイプのみ自動保存を無効化

// functions.php — 商品(product)投稿タイプのみ無効化
add_action('admin_enqueue_scripts', function($hook) {
    if (!in_array($hook, ['post.php', 'post-new.php'])) return;

    $screen = get_current_screen();
    if ($screen && $screen->post_type === 'product') {
        wp_deregister_script('autosave');
    }
});

自動保存データの確認とクリーンアップ

# autosave として保存されているリビジョンを確認
wp post list --post_type=revision --post_status=inherit \
  --fields=ID,post_title,post_date | grep autosave

# 古いリビジョンを一括削除
wp post delete $(wp post list --post_type=revision --format=ids) --force

注意事項

  • 自動保存を完全に無効化すると、ブラウザクラッシュや誤操作時のデータ復元ができなくなります
  • Gutenbergの自動保存とクラシックエディタの自動保存は別のスクリプトを使用しているため、両方に対応する必要があります
  • wp_deregister_script('autosave') はフロントエンドには不要です(wp_enqueue_scripts ではなく admin_enqueue_scripts を使う)

まとめ

完全無効化よりも AUTOSAVE_INTERVAL=180 で間隔を延ばすのが安全なバランスです。DBへの書き込み頻度を下げながら、データ消失リスクを抑えられます。特定の投稿タイプのみ制御したい場合は admin_enqueue_scripts のフック内で get_current_screen() を活用してください。

お気軽にご相談ください

お見積りへ お問い合わせへ