【WordPressで特定のファイルを読み込む場合には「locate_template」をよく使っています】

この前「WordPressの「TEMPLATEPATH」と「STYLESHEETPATH」の違いについて」を知ったところで、テーマフォルダ内の特定のファイルを読み込む場合は、私は「locate_template」を使っています。

「locate_template」とは

Codexの「Function Reference/locate template」を参考にいたしますと、以下のように書かれています。

Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which inherit from a parent theme can just overload one file.

微妙に和訳できないんですけど、たぶん、

ファイルを読み込みます。読み込むファイルは「STYLESHEETPATH」を優先して探しますよ。「TEMPLATEPATH」はそのあとに探します。親テーマから継承しているテーマ(たぶん子テーマのこと)とか使っていたら、子テーマ内にファイルがあるかどうかを最初に探して、ファイルがあったら読み込まれますわ~

って理解しています。

コードの書き方(例)

<?php locate_template( $template_names, $load, $require_once ) ?>

パラメーター

$template_names → 読み込みたいファイル名を指定

$load → trueにすると、ファイルを見つけたら読み込む

$require_once → 「true」だと、「require_once」関数が実行される。「false」だと「require」関数が実行される。※$loadが「true」になっている時のみ処理される

・・・うーむ、これだけだとわからないので、「locate_template」の中身を見ました。「wp-includes/template.php」ファイル内に以下のように書かれています。

locate_templateの中身

function locate_template($template_names, $load = false, $require_once = true ) {
 $located = '';
 foreach ( (array) $template_names as $template_name ) {
 if ( !$template_name )
  continue;
 if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
  $located = STYLESHEETPATH . '/' . $template_name;
  break;
 } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
  $located = TEMPLATEPATH . '/' . $template_name;
  break;
 }
}
if ( $load && '' != $located )
 load_template( $located, $require_once );
return $located;
}

上のコードを眺めると、ようやくなんとなくわかると言いますか、「STYLESHEETPATH」にある「$template_name」があるかどうか探していますね。ない場合には「TEMPLATEPATH」に「$template_name」があるかどうか探して「$located」に格納しています。

まとめ

前回書いた記事「WordPressの「TEMPLATEPATH」と「STYLESHEETPATH」の違いについて」と併せてご参考頂けると、「locate_template」を使っていれば、どういった動きになるのかなんとなく理解できますね。私は理解できました。

著者:bouya Imamura