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?
コメント