get_stylesheet_directory_uri も、get_template_directory_uri も、WordPressのテーマのあるURLを返す関数で、テーマをカスタマイズする際にはちょくちょくお世話になります。
で、この2つ。どう違うかというと、
get_stylesheet_directory_uri が子テーマのURL、
get_template_directory_uri が親テーマのURLを
それぞれ返します。
たとえば、子テーマから元テーマにあるファイルを呼び出したい時には
子テーマの中で用意したファイルを呼び出したい時には、
といった感じ。
もし、子テーマではなく、親テーマでget_stylesheet_directory_uri を使った場合ですが、get_template_directory_uri と同じ親テーマのURIを返すので、親テーマでは使い分けを気にする必要はありませんね。
ちなみに、get_template_directory、get_stylesheet_directory、のように、_uriを外せば、URIではなくPATHを取得できるので、
子テーマの中で用意したファイルを呼び出したい時には、
としたほうが、DNS経由しない分高速になるかもしれない。
さらに、get_template_directory、get_stylesheet_directory、はそれぞれ、TEMPLATEPATH、STYLESHEETPATH という定数が用意されているので、
TEMPLATEPATH . ‘/sns_buttons.php’); ?>
STYLESHEETPATH . ‘/sns_buttons.php’); ?>
でもOK。
ここで、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 | 親テーマフォルダにあるファイルを読み込む | 子テーマフォルダにあればそれを、なければ親テーマフォルダにあるファイルを読み込む |