2026年5月20日

2026年5月20日

WordPressのカスタマイザーの変更が保存されない場合の解決方法

はじめに

カスタマイザーで「公開」ボタンを押しても変更が保存されない・反映されない場合、nonce(セキュリティトークン)の期限切れ・キャッシュ・データベース書き込みエラーが主な原因です。手順を追って確認することで解決できます。

症状・原因

  • 「公開」ボタンを押しても変更が反映されない
  • 公開後にページをリロードすると元に戻る
  • 「保存中」のまま止まる
  • カスタマイザーで変更してもフロントエンドに反映されない

解決手順

ステップ1:ブラウザのキャッシュをクリアする

まず試すべき基本確認:

1. ブラウザのキャッシュをクリア:
   → Chrome: Ctrl+Shift+Delete → キャッシュされた画像とファイル → クリア
   → または Ctrl+Shift+R(ハードリロード)

2. シークレットモード(プライベートウィンドウ)で確認:
   → Ctrl+Shift+N(Chrome)/ Ctrl+Shift+P(Firefox)

3. 別のブラウザで確認:
   → Chrome, Firefox, Edgeなど

4. サーバーキャッシュプラグインを一時無効化:
   → WP Super Cache, W3 Total Cache, LiteSpeed Cache等

ステップ2:WordPressのキャッシュをクリアする

# WordPressのオブジェクトキャッシュをクリア
wp cache flush

# トランジェントをすべて削除
wp transient delete --all

# カスタマイザー保存データを確認
wp option get theme_mods_$(wp theme list --status=active --field=name) --format=json

# カスタマイザーのオートドラフトを削除
wp post delete $(wp post list --post_type=customize_changeset --post_status=auto-draft --format=ids) --force 2>/dev/null || echo "オートドラフトなし"

ステップ3:nonceエラーを確認・対処する

# nonceの有効期限を確認(デフォルト12時間)
wp eval "echo wp_nonce_tick() . PHP_EOL;"

# サーバー時刻がずれていないか確認
wp eval "echo current_time('mysql') . PHP_EOL;"
date  # サーバーのシステム時刻

# nonceが期限切れになる原因:
# → セッションが長時間アクティブ
# → サーバー時刻のズレ
# → セキュリティプラグインによる制限
// wp-config.php でnonce有効期限を延長(一時的な対処)
// デフォルト: 43200秒(12時間)
add_filter('nonce_life', function(): int {
    return DAY_IN_SECONDS; // 24時間
});

ステップ4:データベースの書き込みエラーを確認する

# WP_DEBUG有効化後にカスタマイザーを保存して確認
wp eval "
\$theme = get_option('stylesheet');
\$mods = get_theme_mods();
echo 'テーマ: ' . \$theme . PHP_EOL;
echo '保存済みmod数: ' . count(\$mods) . PHP_EOL;
var_dump(\$mods);
"

# wp_optionsテーブルの書き込みテスト
wp option update _test_write_permission "test_$(date +%s)"
wp option get _test_write_permission
wp option delete _test_write_permission

# データベースの整合性確認
wp db check
wp db repair

ステップ5:カスタマイザー保存の手動確認

# 現在保存されているtheme_modsを確認
wp theme mod list --format=table

# theme_modを手動で設定してみる
wp theme mod set blogname "テストサイト名"
wp theme mod get blogname

# カスタマイザーで設定した値をCLIで確認
wp eval "
\$mods = get_theme_mods();
foreach (\$mods as \$key => \$value) {
    echo \$key . ': ' . print_r(\$value, true) . PHP_EOL;
}"

ステップ6:プラグイン・テーマの競合を確認する

# セキュリティプラグインがPOSTリクエストをブロックしていないか確認
wp eval "
\$response = wp_remote_post(admin_url('admin-ajax.php'), [
    'body' => ['action' => 'customize_save'],
    'cookies' => [],
]);
echo wp_remote_retrieve_response_code(\$response) . PHP_EOL;
"

# カスタマイザーに関連するエラーをログで確認
grep -i "customiz" wp-content/debug.log | tail -20

# プラグインを無効化して再テスト
wp plugin deactivate --all
# カスタマイザーを保存 → 成功したら原因プラグインを特定
wp plugin activate --all

注意事項

  • カスタマイザーの変更は theme_mods_{テーマ名} というオプションとしてデータベースに保存されます
  • キャッシュプラグインが有効な場合、変更がフロントエンドに反映されるまでにキャッシュのクリアが必要です
  • カスタマイザーセッションが30分以上経過するとnonceが無効になり保存できなくなります

まとめ

カスタマイザーの変更が保存されない場合は「ブラウザキャッシュクリア → WordPressキャッシュクリア → nonce確認 → DBへの書き込みテスト」の順で確認します。wp theme mod list で保存済みのデータを直接確認できます。

お気軽にご相談ください

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