テンプレートパーツ読み込み時の仕様とフックについて

このページでは、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 )の処理の中では複数のフックが利用できるようになっており、次の順番で処理が走るようになっています。

  1. アクション : arkhe_pre_get_part__{$path}
  2. フィルター : arkhe_part_args__{$path}
  3. フィルター : arkhe_part_path__{$path}
  4. フィルター : arkhe_part_cache__{$path}
  5. フィルター : arkhe_part__{$path}
  6. アクション : arkhe_did_get_part__{$path}

いずれも、has_filter()でフックの存在チェックを先に行ってから実行しています。

ヘッダーロゴの取得部分Arkhe::get_part( 'header/logo' ); を例にすると、次のようなフックが利用できるようになっています。

  1. arkhe_pre_get_part__header/logo
  2. arkhe_part_args__header/logo
  3. arkhe_part_path__header/logo
  4. arkhe_part_cache__header/logo
  5. arkhe_part__header/logo
  6. 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キャッシュコンテンツ。
先に同フックでコンテンツが返されていない限り、値は''です。
$pathArkhe::get_part()の第1引数。
$inc_pathキャッシュがなければ読み込まれる予定のファイルパス。
$argsArkhe::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読み込んだコンテンツ。
$argsArkhe::get_part()の第2引数。
コールバックの引数の説明

arkhe_did_get_part__{$path}

Arkhe::get_part()処理が行われた後に発火するアクションフックです。