2026年5月20日

2026年5月20日

WordPressのウィジェット保存でエラーが出る場合の解決方法

はじめに

WordPressのウィジェット編集画面でウィジェットを追加・移動・保存しようとすると「変更を保存できませんでした」または「リクエストが失敗しました」と表示されることがあります。WordPress 5.8以降でウィジェット画面がブロックエディタ化されたことで、この問題が増えています。

症状・原因

  • 「変更を保存できませんでした」が表示される → REST APIのnonce検証失敗
  • ウィジェットをドラッグしても保存されない → JavaScriptエラー
  • 特定のウィジェットだけ保存できない → プラグインの競合
  • ウィジェット画面が古いデザインのまま → ブロックウィジェット無効化プラグインの影響

解決手順

ステップ1:ブラウザのコンソールを確認

F12 → Consoleタブでエラーを確認します。401 Unauthorized が出ている場合はnonce(認証トークン)の問題です。

# nonce関連のオプションをリセット
wp cache flush

ステップ2:REST APIが動作しているか確認

ウィジェットの保存はREST APIを使用しています。

# REST APIの疎通確認
curl -s https://example.com/wp-json/ | head -c 100
# JSONが返ってくればOK、エラーが返る場合はREST APIが制限されている

REST APIが rest_authentication_errors フィルターで制限されている場合は、ウィジェット保存も影響を受けます。

ステップ3:プラグインを無効化してテスト

wp plugin deactivate --all

プラグインを全無効化してウィジェットを保存できた場合は、1つずつ有効化して原因プラグインを特定します。

ステップ4:クラシックウィジェットに戻す

ブロックウィジェットが問題の場合は、クラシックウィジェット画面に戻します。

// functions.php — ブロックウィジェットを無効化してクラシック画面に戻す
add_filter('use_widgets_block_editor', '__return_false');

または「Classic Widgets」プラグインをインストールします。

ステップ5:ウィジェットを手動で登録・確認

// functions.php — ウィジェットエリアが正しく登録されているか確認
add_action('widgets_init', function() {
    register_sidebar([
        'name'          => 'サイドバー',
        'id'            => 'sidebar-1',
        'before_widget' => '<div class="widget">',
        'after_widget'  => '</div>',
        'before_title'  => '<h3 class="widget-title">',
        'after_title'   => '</h3>',
    ]);
});

ステップ6:wp_options のウィジェットデータを確認

# ウィジェットのデータを確認
wp option get widget_text
wp option get sidebars_widgets

# ウィジェットデータが破損している場合はリセット
wp option delete sidebars_widgets

ブロックウィジェットのJavaScriptエラーの対処

// SCRIPT_DEBUG で詳細なエラーを確認
define('SCRIPT_DEBUG', true);

wp-includes/js/dist/widgets.js または wp-admin/js/widgets/ 関連のエラーが出ている場合は、テーマのJavaScriptとの競合が疑われます。

注意事項

  • use_widgets_block_editor → __return_false はWordPress 5.8以降のみ有効です
  • ウィジェットデータは wp_options テーブルに widget_{type}sidebars_widgets キーで保存されています
  • マルチサイト環境ではサイト個別の設定が wp_{blog_id}_options に保存されます

まとめ

ウィジェット保存エラーの多くはREST APIのnonce問題かプラグイン競合です。まず wp cache flush とブラウザのコンソールエラー確認から始め、解決しない場合は use_widgets_block_editor → __return_false でクラシック画面に戻すことで即時回避できます。

お気軽にご相談ください

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