2015年5月4月に行われたテーマレビューガイドラインの変更があり、カスタマイザーという記事を書きました。
設定データを「共有」するか「独自に持つ」かによってテーマの性質が異なり、子テーマの用途により、向き不向きが出る という記事だったわけですが、Raindropsテーマは、optionフィールドを使っていて その「向き不向き」に対応する機能を持ち合わせていませんでした。
以来1年半が経過し、Raindrops1.433で、やっとoptionとtheme_modを切り替えする機能を公開できるようになりました。
この切り替え機能は、技術的にはごく普通の実装ですが、切り替え機能を持つテーマを見つけることはほとんどないと思います。
この、ちっちゃな機能が 何の役に立つのか考えてみましょう。
チャイルドテーマ
まず、チャイルドテーマで保存先をtheme_modに変更した場合
カスタマイザーで、どれだけ設定の内容を変えても、親テーマに設定されている値を書き換えることはなくなり、親テーマと切り離された別のテーマのように使用できます。
親テーマも、チャイルドテーマもoptionに設定(つまり何も設定しない場合)は、
親テーマの設定を完全に共有します。サイトの不具合を調整するようなチャイルドテーマの使い方の場合は、ある特定の部分だけに手を入れるといった作業が出来ます。
この切り替え機能を動的に使うとどうなるのか?
例えばリニューアル
既に、テーマの設定を済ませて運営中のサイトがあるとします。
functions.php
if( is_user_logged_in()){ $raindrops_setting_type= 'theme_mod'; } else { $raindrops_setting_type= 'option'; }
を追加すると、ログインユーザーだけがtheme_modで設定されたテーマの表示になり、一般ユーザーは、従来通りのサイトを見ることになります。
カスタマイザーの設定も、theme_modに表示されるようになるため、ログイン状態で公開サイトを影響を与えないで変更が可能になります。(ただ、カスタマイザーには、COREが実装している ヘッダー画像だとか、ヘッダーテキスト色、固定フロントページの設定とか それぞれ、theme_modやoptionを使っている部分がありますので、それらについては、現在の$raindrops_setting_type設定値に応じたフィルター処理は発生します。)
つまり、一つのテーマが、二つの顔を持つようになります。
こうする事で、複数のユーザーが、いや1カラムのほうがいいとか、2カラムほしいとか議論をしたり、長い時間考えながらテーマの表示を検討したりすることが出来るようになります。
ログイン画面でのカスタマイズが完成したら、非ログインの表示を
$raindrops_setting_type= 'theme_mod';
に切り替えてやることで、リニューアルは完了するでしょう。
データベースの複製を作ったり、サイトの更新をするために、テスト用の別サイトを作ったり、テーマスイッチする事から考えると、制約はありますが、テーマを変更する事でスタイルを調整したり 移設の手間は比較にならないのではないかと思います。
留意事項
ワードプレスのカスタマイザーにコアプログラムが設定している項目は、ログインしていない場合でも表示が変更されてしまうので、
コアで設定されている項目を非表示にするとかフィルターを使うなどを検討する必要があります。
Title | ID | Priority (Order) |
Site Title & Tagline | title_tagline | 20 |
Colors | colors | 40 |
Header Image | header_image | 60 |
Background Image | background_image | 80 |
Navigation | nav | 100 |
Widgets (Panel) | widgets | 110 |
Static Front Page | static_front_page | 120 |
default | 160 |
それ以外にも、会員制ブログなどで、会員 非会員向けのテーマデザインを変更する等といった事が、簡単にできる可能性があります。