2026年7月15日

2026年7月15日

WordPressのテーマが更新されない・カスタマイズが反映されない問題を解決する方法

はじめに

テーマのCSSを編集したのにサイトのデザインが変わらない場合、ブラウザキャッシュ・プラグインのページキャッシュ・CSSのバージョン文字列が原因であることがほとんどです。親テーマを直接編集している場合はテーマ更新で上書きされるため、子テーマへの移行も合わせて解説します。

症状・原因

  • CSSを編集してもブラウザに反映されない
  • テーマのアップデートをしたらカスタマイズが消えた
  • カスタマイザーで変更しても保存されない・反映されない
  • ブラウザによって表示が異なる(キャッシュの違い)

解決手順

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

# WordPress のキャッシュをクリア
wp cache flush
wp transient delete --all

# キャッシュプラグインをクリア(W3 Total Cache)
wp w3-total-cache flush all

# キャッシュプラグインをクリア(WP Super Cache)
wp eval "
if (function_exists('wp_cache_clear_cache')) {
    wp_cache_clear_cache();
    echo 'WP Super Cache cleared';
}
"

# ブラウザでハードリロード
# Windows: Ctrl + Shift + R
# Mac: Cmd + Shift + R
# または F12 → ネットワーク → 「キャッシュを無効化」にチェック

ステップ2:CSSのバージョン文字列を更新する

// functions.php: CSS のバージョンを更新して強制再読み込みさせる

// ❌ バージョンが固定されているとキャッシュが残る
wp_enqueue_style('my-theme', get_stylesheet_uri(), [], '1.0.0');

// ✅ ファイルの更新時刻をバージョンとして使う(開発時に便利)
wp_enqueue_style(
    'my-theme',
    get_stylesheet_uri(),
    [],
    filemtime(get_stylesheet_directory() . '/style.css')
);

// ✅ 本番環境ではデプロイ時に変えるバージョン番号を使う
define('MY_THEME_VERSION', '2.1.0');
wp_enqueue_style('my-theme', get_stylesheet_uri(), [], MY_THEME_VERSION);

ステップ3:子テーマを正しく設定する

// 子テーマの functions.php: 親テーマのスタイルを正しく読み込む

add_action('wp_enqueue_scripts', function(): void {
    // 親テーマのスタイルを読み込む
    wp_enqueue_style(
        'parent-style',
        get_template_directory_uri() . '/style.css',
        [],
        wp_get_theme(get_template())->get('Version')
    );

    // 子テーマのスタイルを読み込む(親の後に読み込まれる)
    wp_enqueue_style(
        'child-style',
        get_stylesheet_uri(),
        ['parent-style'],
        filemtime(get_stylesheet_directory() . '/style.css')
    );
});
子テーマの style.css ヘッダー(必須):
/*
 Theme Name: My Child Theme
 Template:   twentytwentyfour      ← 親テーマのディレクトリ名(完全一致)
 Version:    1.0.0
*/

ステップ4:カスタマイザーの変更が保存されない問題を解決する

# カスタマイザーの設定を確認
wp db query "SELECT option_name, option_value
FROM wp_options
WHERE option_name LIKE '%theme_mods%'
LIMIT 5;"

# カスタマイザーの設定をリセット
wp eval "
\$theme = get_stylesheet();
remove_theme_mods();
echo 'Theme mods cleared for: ' . \$theme;
"

# パーミッションが原因の場合
ls -la /var/www/html/wp-content/themes/
chmod -R 755 /var/www/html/wp-content/themes/
// functions.php: カスタマイザーの設定が保存されない場合の診断
add_action('customize_save_after', function(\WP_Customize_Manager $manager): void {
    error_log('[customizer] Settings saved at ' . current_time('mysql'));
    error_log('[customizer] ' . count($manager->settings()) . ' settings total');
});

ステップ5:テーマエディター・追加CSSの競合を解消する

# 追加CSSの内容を確認(管理画面「外観」→「カスタマイズ」→「追加CSS」)
wp db query "SELECT option_value FROM wp_options
WHERE option_name LIKE 'theme_mods_%';" | grep -i "custom_css"

# WP-CLI で追加CSSを確認
wp eval "
\$mods = get_theme_mods();
if (isset(\$mods['custom_css'])) {
    echo \$mods['custom_css'];
}
"
// CSSの読み込み順を確認する(後から読まれるCSSが優先される)
add_action('wp_enqueue_scripts', function(): void {
    // デバッグ用:読み込まれているスタイルシートを一覧表示
    if (current_user_can('administrator') && isset($_GET['debug_css'])) {
        global $wp_styles;
        foreach ($wp_styles->queue as $handle) {
            $style = $wp_styles->registered[$handle];
            error_log('[css] ' . $handle . ': ' . $style->src);
        }
    }
}, 999);
// アクセス: https://example.com/?debug_css=1

注意事項

  • 親テーマを直接編集してカスタマイズした場合、テーマのアップデート時に変更が消えます。必ず子テーマを作成してカスタマイズしてください
  • キャッシュプラグイン(W3 Total Cache・WP Super Cache・LiteSpeed Cache等)がある場合、CSS変更後は必ずプラグインのキャッシュもクリアしてください。ブラウザのキャッシュだけクリアしても不十分なことがあります
  • filemtime()をバージョンとして使うのは開発環境では便利ですが、本番環境ではファイルシステムへのアクセスが増えるため、本番では固定のバージョン番号を使ってください

まとめ

テーマ変更が反映されない問題の解決は①wp cache flushとブラウザのCtrl+Shift+Rで全キャッシュをクリア、②wp_enqueue_styleの第4引数をfilemtime()で自動更新してCSS再読み込みを強制、③子テーマのstyle.cssヘッダーにTemplate: 親テーマ名を正確に記述して親スタイルをwp_enqueue_styleで読み込み、④カスタマイザーの保存はcustomize_save_afterフックでログ確認、⑤?debug_css=1で読み込まれているCSSの順序を確認して競合を特定します。

お気軽にご相談ください

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