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 でクラシック画面に戻すことで即時回避できます。