このページでは、WordPressテーマ「Arkhe(アルケー)」でのテンプレートパーツファイルの読み込みに関する仕様について解説していきます。
Arkheではget_template_part()
を拡張したようなArkhe::get_part()
という関数を独自に用意しており、そちらを使って各種パーツを読み込んでいます。
Arkhe::get_part() の解説
▼ 基本形
Arkhe::get_part( $path, $args );
デフォルトでは「テーマ直下の/template-parts/$path
」を読み込み、第2引数の$args
を受け渡します。
- 「テーマファイル内の
/template-parts/{$path}.php
」を読み込みます。 - その時、第2引数の
$args
を受け渡します。- ※
$args
の初期値はnull
です。
- ※
ただし、get_template_part()
と同様、読み込むファイルには優先度があります。
- 子テーマのファイルを最優先で検索
子テーマ/template-parts/{$path}.php
が存在すれば、そのファイルを最優先で読み込みます。
- 次に、
Arkhe::$ex_parts_path
で指定されたパスの直下を検索Arkhe::$ex_parts_path
はデフォルトでは空です。Arkhe::$ex_parts_path
が空でない時、かつその直下の/template-parts/{$path}.php
が存在すれば、そのファイルを読み込みます。
- ①も②もどちらも存在しなければ、親テーマを検索
arkhe/template-parts/{$path}.php
を読み込みます。
例えば、Arkheではヘッダーのロゴ部分を次のコードで読み込んでいます。
Arkhe::get_part( 'header/logo' );
この時は以下の順番でheader/logo.php
が検索され、ファイルが読み込まれます。
子テーマ/template-parts/header/logo.php
{Arkhe::$ex_parts_path}/template-parts/header/logo.php
arkhe/template-parts/header/logo.php
パーツ読み込み時のフック一覧
Arkhe::get_part( $path )
の処理の中では複数のフックが利用できるようになっており、次の順番で処理が走るようになっています。
- アクション :
arkhe_pre_get_part__{$path}
- フィルター :
arkhe_part_args__{$path}
- フィルター :
arkhe_part_path__{$path}
- フィルター :
arkhe_part_cache__{$path}
- フィルター :
arkhe_part__{$path}
- アクション :
arkhe_did_get_part__{$path}
いずれも、has_filter()
でフックの存在チェックを先に行ってから実行しています。
ヘッダーロゴの取得部分、Arkhe::get_part( 'header/logo' );
を例にすると、次のようなフックが利用できるようになっています。
arkhe_pre_get_part__header/logo
arkhe_part_args__header/logo
arkhe_part_path__header/logo
arkhe_part_cache__header/logo
arkhe_part__header/logo
arkhe_did_get_part__header/logo
それぞれのフックについて、もう少し詳しく解説していきます。
arkhe_pre_get_part__{$path}
Arkhe::get_part()
の処理が行われる前に発火するアクションフックです。
arkhe_part_args__{$path}
Arkhe::get_part()
の第二引数、$args
を上書きすることができるフィルターフックです。
arkhe_part_path__{$path}
Arkhe::get_part()
で読み込もうとしているファイルパスを上書きすることができるフィルターフックです。
子テーマ > Arkhe::$ex_parts_path
> 親テーマの順でファイルを検索した結果を、さらに上書きします。
使い方
add_filter( 'arkhe_part_path__{$path}', function( $inc_path ) {
return '任意のパス';
} );
$inc_path | 読み込もうとしているファイルのパス。 |
arkhe_part_cache__{$path}
キャッシュ生成・取得用のフィルターフックです。
このフックで空でないコンテンツを返すと、ファイルの読み込みをスキップしてそのコンテンツをそのまま表示します。
使い方
add_filter( 'arkhe_get_part_cache__{$path}', function( $cache, $path, $inc_path, $args ) {
/* キャッシュの取得・生成処理などをここで */
return $cache;
}, 10, 4 );
$cache | キャッシュコンテンツ。 先に同フックでコンテンツが返されていない限り、値は '' です。 |
$path | Arkhe::get_part() の第1引数。 |
$inc_path | キャッシュがなければ読み込まれる予定のファイルパス。 |
$args | Arkhe::get_part() の第2引数。 |
プラグインの「Arkhe Toolkit」ではヘッダー・フッター・サイドバーのキャッシュが簡単に生成できるようになっていますが、このフックを使うことで、ご自身でも任意のパーツに対してキャッシュ機能を実装可能です。
arkhe_part__{$path}
Arkhe::get_part()
で読み込まれたコンテンツの内容を書き換えることができるフィルターフックです。
使い方
add_filter( 'arkhe_part__{$path}', function( $parts_content, $args ) {
/* $parts_content の書き換え処理... */
return $parts_content;
}, 10, 2 );
$parts_content | 読み込んだコンテンツ。 |
$args | Arkhe::get_part() の第2引数。 |
arkhe_did_get_part__{$path}
Arkhe::get_part()
の処理が行われた後に発火するアクションフックです。