WordPressサイトで子テーマを後から適用するときに親テーマのカスタマイザーの設定内容を引き継ぐ方法

Last updated:

Wordpressで子テーマを使わずにサイトやブログを作ってすでに稼働している中、あとからfunction.phpに何らかの関数を追加したい場合にはどうすればいいか。

カスタマイザー(外観 > カスタマイズ )で何も設定していなければ、そのテーマの子テーマを作って、子テーマを有効にすれば問題ない。

でも、たいていの場合は親テーマのカスタマイザーで何かしらの設定をしてあり、それは親テーマのものとして保存されているので、子テーマに切り替えたとたん、設定してあった親テーマのカスタマイザーの内容が消えてしまう。設定を子テーマで1からやり直すのが大変でないならそうすればいいのだけど、カスタマイザーでの設定事項が多い場合は面倒だし見落としもありそう。

そんな時は、DBで親テーマに適用されているカスタマイザーの設定内容を「子テーマのもの」であるという風に変更してあげればよい。

実は、カスタマイザでの設定内容は、データベースのwp_optionsテーブル内(←プレフィックス部分wp_は別の文字列の場合もあるが、便宜上ここではwp_がプレフィックスであるとする)の一行にすべてが保存されている。

phpMyAdminなどでDBにアクセスし、wp_optionsテーブルを表示、検索窓でtheme_mods_(親テーマ名)を探す。

これを theme_mods_(親テーマ名) → theme_mods_(親テーマ名)-child と変更する。
例えば、テーマがabcという名前だったら theme_mods_abc を theme_mods_abc-child とする。

こうすれば、今まで親テーマのカスタマイザーの設定内容だったものが、子テーマのものとして認識されるようになる。

注意:すでに子テーマのカスタマイザーで何らかの設定をした場合、wp_optionsテーブルにtheme_mods_(親テーマ名)-child の行ができてしまい、上記の設定変更ができなくなる。
この場合は、先にtheme_mods_(親テーマ名)-child の行を削除してから、theme_mods_(親テーマ名) → theme_mods_(親テーマ名)-child と変更すればOK。

あとは管理画面から子テーマを有効にすればいい。

参考:Where is customizer related data stored in the database?

More Stories
WordPressのセキュリティ対策に必須!ログイン攻撃からブログを守るプラグイン2つ