テーマ「ShapeShifter」の構造
テーマ「ShapeShifter」のファイル一覧を見てみると、ちょっと変わった形をいていて分かりにくいかもしれません。それもその筈で、テーマ「ShapeShifter」で一般的なテーマでも使用されている共通のテンプレートファイルは「header.php」「footer.php」「comments.php」「index.php」「functions.php」「searchform.php」「style.css」のみです。
他のテンプレートは「templates」というフォルダ内に用意されており、子テーマでは、このディレクトリ内で同じファイルを作成することにより出力されるアイテムを編集することが可能です。
ファイルの読まれる流れ
まず、公開側のページでは全て「index.php」が呼び出されるようになっており、そこで「header.php」と「footer.php」を呼び出しています。以下のように1行のみです。
<?php if( function_exists( 'shapeshifter_public' ) ) shapeshifter_public(); ?>
訂正:現在のバージョンでは、「header.php」と「footer.php」にそれぞれのコードは残したまま、「index.php」にまとめてコーディングされています。
実はここに書かれている「shapeshifter_public」という関数がその他コンテンツの全てを出力しており、全て「public/classes/original/public.php」というファイルで定義・制御されています。
プラグイン・子テーマを意識
テーマ自体には設定項目を設定するページを用意していませんので、テーマの「functions.php」が読まれるよりも前に設定値を連想配列の形で「$shapeshifter_options」に定義しておくことで、プラグイン・子テーマによる設定値を受け取ることが出来るようになっています。
また、プラグイン・子テーマにより、継承クラスを作成して代替使用できるように、クラスの初期化する関数もそれぞれアクションフックを使用して呼び出していますので、アクションフック「shapeshifter_at_the_end_of_includes_constructor」により「remove_action」でメソッドを外し、「add_action」で自分が使いたい継承クラス等用の関数を使えるようにしていますので、プラグインや子テーマからデータを引き継いで大きな編集を加える事が可能なコーディングにしています。
これは僕自身がプレグインによって機能追加するのに便利だと思ってそうしており、実際にプラグイン「WP Theme ShapeShifter Extensions」では、テーマのクラスを継承して編集している形となっています。