get_stylesheet_directory_uri と、get_template_directory_uri の違い

get_stylesheet_directory_uri も、get_template_directory_uri も、WordPressのテーマのあるURLを返す関数で、テーマをカスタマイズする際にはちょくちょくお世話になります。

get_stylesheet_directory_uri と、get_template_directory_uri の違い

で、この2つ。どう違うかというと、

get_stylesheet_directory_uri が子テーマのURL
get_template_directory_uri が親テーマのURLを
それぞれ返します。

たとえば、子テーマから元テーマにあるファイルを呼び出したい時には

<?php require(get_template_directory_uri() . '/sns_buttons.php'); ?>

子テーマの中で用意したファイルを呼び出したい時には、

<?php require(get_stylesheet_directory_uri() . '/sns_buttons.php'); ?>

といった感じ。

もし、子テーマではなく、親テーマでget_stylesheet_directory_uri を使った場合ですが、get_template_directory_uri と同じ親テーマのURIを返すので、親テーマでは使い分けを気にする必要はありませんね。

ちなみに、get_template_directory、get_stylesheet_directory、のように、_uriを外せば、URIではなくPATHを取得できるので、

<?php require(get_template_directory() . '/sns_buttons.php'); ?>

子テーマの中で用意したファイルを呼び出したい時には、

<?php require(get_stylesheet_directory() . '/sns_buttons.php'); ?>

としたほうが、DNS経由しない分高速になるかもしれない。

さらに、get_template_directory、get_stylesheet_directory、はそれぞれ、TEMPLATEPATH、STYLESHEETPATH という定数が用意されているので、

<?php require(TEMPLATEPATH . '/sns_buttons.php'); ?>
<?php require(STYLESHEETPATH . '/sns_buttons.php'); ?>

でもOK。

get_template_part を子テーマで使ったらどうなる?

ここで、require関数ではなく、get_template_part を子テーマで使ったらどうなるかが気になったので、調べてみました。

WordPressの関数リファレンスでは、

テンプレートパーツ (ヘッダー、サイドバー、フッター以外) をテンプレートに読み込みます。これにより、テーマがコードのセクションを再利用すること、また子テーマが親テーマのセクションを置き換えることが容易になります。

となってますが、置き換えることがどう容易になるかピンときません。

で、get_template_part のソースコードを直接覗いてみると、get_template_part関数内で、locate_template関数を呼び出していて、 locate_template関数の中で、こんなふうになってました。

if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
        $located = STYLESHEETPATH . '/' . $template_name;
        break;
} elseif ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
        $located = TEMPLATEPATH . '/' . $template_name;
        break;
}

STYLESHEETPATH と、TEMPLATEPATH は、それぞれ、get_stylesheet_directory と、get_template_directory と等価なので、
まず、子テーマフォルダに、指定されたテンプレートファイルがあるかどうか確かめて、
なければ親テーマフォルダを探す。

というふうになってます。
なので、親テーマで用意されたテンプレートを、子テーマ側で上書きできるよ。ということですね。

まとめ

親テーマ 子テーマ
テーマフォルダのURIを返す get_template_directory_uri get_stylesheet_directory_uri
テーマフォルダのPATHを返す get_template_directory
TEMPLATEPATH
get_stylesheet_directory
STYLESHEETPATH
get_template_part 親テーマフォルダにあるファイルを読み込む 子テーマフォルダにあればそれを、なければ親テーマフォルダにあるファイルを読み込む

 

 

 

 

0
  • このエントリーをはてなブックマークに追加