i-Willink
|Tech|✍️ i-Willink

WordPress テーマを更新すると設定が消える?

テーマの再アップロードで写真・ロゴが初期化される「カスタマイズ設定リセット」問題。受託案件で実際に直した原因と恒久対策を共有します。

🗂️ 3行でわかるポイント

  • 1テーマ更新のたびに写真・ロゴ等のカスタマイザー設定がデフォルトに戻る
  • 2原因は theme_mods が theme_mods_{テーマフォルダ名} で保存されること
  • 3固定フォルダ名運用 + 移行関数の堅牢化で恒久解決(wp-env で E2E 検証)
WordPress theme_mods 永続化
WordPress カスタマイザー設定(theme_mods)の永続化
WordPresstheme_mods受託 / 保守

キーワード

theme_modsカスタマイザーget_theme_modafter_switch_themewp-env

この記事でわかること

  • 更新で設定が消える本当の原因
  • 固定フォルダ名運用という恒久対策
  • フォルダ名が変わっても引き継ぐ移行関数
  • wp-env による実機 E2E 検証

「テーマを更新したら、設定していた写真が古いものに戻ってしまった」—— WordPress テーマの受託・保守でときどき遭遇する、地味だが厄介な事象です。

カスタマイザーで設定したロゴ・トップ画像・色・電話番号などが、テーマの再アップロードを境に 一斉にデフォルト(テーマ同梱の初期画像)へ戻る。再設定してもまた次の更新で消える——。 原因が分かりにくく、「WordPress の不具合」と誤解されがちですが、 実際は theme_mods の保存のしくみに起因する、再現性のある問題です。

🔍原因 — 設定キーがフォルダ名に紐づく

カスタマイザーの設定値(get_theme_mod() / set_theme_mod())は、 WordPress の options テーブルに theme_mods_{テーマフォルダ名} というキーで保存されます。写真・ロゴ・色などは、ほぼこの theme_mods に入っています。

ここで、テーマを my-theme-1.5.0my-theme-1.5.1 のようにバージョン付きフォルダ名でデプロイすると、 保存キーが theme_mods_my-theme-1.5.0 theme_mods_my-theme-1.5.1別物になり、 新フォルダ側には設定が無い=デフォルト表示に戻ってしまうのです。

🧩

theme_mods の保存先

theme_mods_{stylesheet} という options 行に格納。stylesheet = テーマのフォルダ名 なので、フォルダ名が変わると別キー扱いになります。

📁

バージョン付きフォルダの罠

デプロイ毎にフォルダ名へバージョンを付けると、更新のたびにキーが変わり、 カスタマイザー設定がリセットされます。

🛠️恒久対策 — 2 段構え

📌

① フォルダ名を固定する(本命)

テーマフォルダ名を バージョン非依存の固定名 にし、更新は同じフォルダを上書きする運用に。 バージョンは style.cssVersion: と git タグで管理します。 これでキーが永遠に一定になり、リセットが原理的に発生しません

🔁

② 移行関数(安全網)

それでもフォルダ名が変わってしまった場合に備え、after_switch_theme で WordPress が渡す 「直前にアクティブだったテーマ」($old_theme) から theme_mods を確実にコピー。フォールバックは version_compare で「設定が入っている最新バージョン」を選びます。

ポイントは安全網の移行元の選び方です。 素朴に「最初に見つかった theme_mods をコピー」すると、古いバージョンの設定を復元してしまう(=古い写真に戻る) 事故が起きます。WordPress が教えてくれる「直前のテーマ」を使い、 無ければ version_compare で最新の非空エントリを選ぶ——これで取り違えを防げます。

🧪検証 — wp-env で実テーマ切替 E2E

「設定が消えない」は実機で確かめないと意味がありません。@wordpress/env 上で実際にテーマフォルダを複製・有効化し、 3 シナリオで移行関数を検証しました。

移行

固定フォルダへ有効化 → 直前テーマから設定を引き継ぐ。

フォールバック

直前が空でも、設定が入っている最新バージョンを選択(古い版を選ばない)。

再デプロイ保持

同じ固定フォルダを上書きしても設定が保持される。

💡教訓

  • フォルダ名にバージョンを含めない。 バージョンは style.css と git タグで管理する。
  • 「定義済」と「上書き不要」は別概念。 キーがフォルダ名に紐づく以上、フォルダが変われば設定は別物になる。
  • 安全網の移行元は決定的に選ぶ。 「最初に見つかった値」ではなく、直前テーマ or 最新バージョンを選ぶ。
  • 実機で検証する。 wp-env で実際にテーマ切替を再現し、設定が残ることを確認する。

i-Willink では WordPress 受託・保守でこうした「運用で詰まる落とし穴」を構造から潰し、 お客様が安心して更新できる状態を維持しています。

WordPress の受託・保守について相談する

テーマ開発・運用設計・トラブル対応まで、実戦的な知見でサポートします。

お問い合わせ