テーマ「ShapeShifter」の子テーマの作成方法
テーマ「ShapeShifter」はテーマカスタマイザーとプラグインによるカスタマイズの他、子テーマによってもカスタマイズを加えるすることが可能です。
過去の古いバージョンではクラスを継承する形しか用意していませんでしたが、現在はテンプレートファイルを作成することで、一般的なワードプレステーマのようにカスタマイズすることが出来るようになっています。
ブランクな子テーマはこちらをご利用ください。
[wpdm_package id=’586′]
テンプレートファイルの作成・編集
最も簡単なShapeShifterのカスタマイズ方法がテンプレートファイルの作成・編集です。
まず、テーマ「ShapeShifter」のルートにあるフォルダ・ファイル内に「templates」というフォルダが見つかると思います。
この「templates」フォルダ内にあるファイルは、基本的に子テーマであればそちらの同名ファイルから優先的に使用されるようにワードプレス関数「get_template_part」で読まれるようになっています。
こちらは基本的に編集したい箇所に該当するファイルを、子テーマに同名で作成してコピペした後に細かい編集をすることです。
例えば、アーカイブページにある投稿リストのアイテムは「shapeshifter/templates/archive/post-list-item.php」というファイルに書かれていますので、子テーマの同じ位置に同名ファイルを作成して(子テーマ/templates/archive/post-list-item.php)、これを編集していくという形でカスタマイズができます。
ただし、例外的にアーカイブのパジネーションやフッターのライセンス表示など、関数によって定義されていて、テンプレートファイルで編集できない箇所があります。これらの出力箇所に関しては、アクションフックやフィルターフックを用意しています。
使用できるテーマ「ShapeShifter」で定義されるグローバル変数
まず、編集方法の解説の前にテーマ「ShapeShifter」で定義されるグローバル変数を解説していきます。
- 「shapeshifter_theme_mods(連想配列)」:テーマカスタマイザーで設定できる全ての値が初期値に上書きされた状態です。
- 「shapeshifter_options(連想配列)」:プラグイン「WP Theme ShapeShifter Extensions」による設定が初期値に上書きされた状態です。
- 「shapeshifter_includes(オブジェクト)」:テーマ「ShapeShifter」のベースになるオブジェクトです。
- 「shapeshifter_standard_widget_areas(連想配列)」:サイドバーなどテーマ「ShapeShifter」に標準的に登録されているウィジェットエリアのデータです。
- 「shapeshifter_optional_widget_areas(連想配列)」:プラグイン「WP Theme ShapeShifter Extensions」で編集可能なウィジェットエリアのデータ設定値です。
- 「shapeshifter_sidebar_left_width(整数)」:左サイドバー位置の横幅で、テーマカスタマイザーで設定された値となります。
- 「shapeshifter_content_inner_width(整数)」:メインコンテンツの横幅で、テーマカスタマイザーで設定された値となります。ただし、1カラムの場合は値が「+210」されます。
- 「shapeshifter_sidebar_right_width(整数)」:右サイドバー位置の横幅で、テーマカスタマイザーで設定された値となります。
- 「shapeshifter_content_width(整数)」:メインコンテンツエリアの横幅で、上記3つをレイアウト毎に合算した値となりますので、ページ毎に値が異なる場合があります。
- 「is_one_column_page_width_size_max(真偽)」:1カラム時の横幅を最大幅(100%)にします。テーマカスタマイザーでの設定値にカスタムフィールドの値が上書きされらものです。
ただし、定義位置により定義されていない場合があります。例えば、コンテンツエリアの横幅などはアクションフック「wp」で定義されます。
アクションフックとフィルターフック
ワードプレスの関数「add_action」と「add_filter」を使って、追加出力や編集を行うことが出来ます。
アクションフックは全て「shapeshifter/globals/functions/defines/global-action-functions.php」にまとめて定義されていますので、関数名がアクションフック名になっていますので、
add_action( 'action_function_name', 'your_function' ); funciton your_function() { echo '<p>your function prints this.</p>'; }
こんな形で、所定の位置に出力できます。基本的にはその位置に標準的に出力されるアイテムの後に出力されますが、3つ目の引数を「9以下の整数」に設定することで、アイテムの前に出力することが出来ます。
add_action( 'action_function', 'your_function', 9 );
上の関数をアイテムの前に出力する場合の例だと、このように記述します。
アクションフック名のプレフィックスは「shapeshifter_」ですが、フィルターフック名は「shapeshifter_filters_」となりますので、覚えやすいんじゃないでしょうか。
フィルターフックはプレフィックス以下同名アクションフックで出力されるHTML全てを対象にフィルターがかかります。テーマ「ShapeShifter」が標準的に出力するアイテムだけにフィルターを掛けるわけではありません。
クラスの継承
クラス「ShapeShifter_Public」を継承して編集する方法も用意しています。
アクションフック「shapeshifter_at_the_end_of_includes_constructor」で初期化するクラスを変更する必要がありますので、
class Your_Extended_Public extends ShapeShifter_Extended_Public { }
このように更なる継承クラスを作成して編集し、
add_action( 'shapeshifter_at_the_end_of_includes_constructor', 'your_func' ); function your_func() { remove_action( 'shapeshifter_trigger_extended_public', array( 'ShapeShifter_Includes', 'shapeshifter_trigger_extended_public' ) ); add_action( 'shapeshifter_trigger_extended_public', 'your_extended_public' ); } function your_extended_public() { new Your_Extended_Public( $GLOBALS[ 'shapeshifter_options' ] ); }
上のように「shapeshifter_at_the_end_of_includes_constructor」で初期化するクラスの変更を行うことで、全体的に編集を加えることが出来ます。