WordPressのテンプレートインクルードとPHP include
ワードプレスは、例えば、index.phpというテンプレートファイルで、get_header()やget_footer(),get_template_part()等のテンプレートをインクルードするための関数があります。
一方、PHP関数は、includeやrequire等のよく利用される関数があります、違いをメモに残します。
header.php を index.phpからget_header()を使ってインクルードした場合と、requireした場合の違いについて
header.phpに書いた定数オブジェクトが、index.phpで利用できる場合は、○そうでない場合は×
header.phpに書いた変数や定数 | get_header() | require |
変数 $var | × | ○ |
オブジェクト $obj = (object) 'ciao';echo $obj->scalar; | × | ○ |
クラス class foo{function do_foo(){echo "foo を実行します。"; }} | ○ $ins = new foo;echo $ins->do_foo(); | ○ |
関数 function my_func(){return "hello";} | ○ echo my_func(); | ○ |
定数 define("TEST_GET_HEADER","定数"); | ○ echo TEST_GET_HEADER | ○ |
header.php に書いた変数を、index.php global $var としても利用できません
functions.phpに書いた変数などは、また異なります
functions.phpで定義した変数は、
header.phpでは、global宣言すれば使えます。
index.phpでは、global宣言をしなくても、そのまま使えます。
追記:2012/1 WordPressのテンプレートパートファイルのインクルードの仕方は、次のようになっている模様
テンプレートパートファイルをインクルードする場合に、
<?php include (TEMPLATEPATH . '/mydirectory/template.php ?>
と記述する事も出来る
<?php get_template_part('mydirectory/template'); ?>
と記述する事も出来ます
<?php locate_template( 'mydirectory/template.php', true,true ); ?>
と記述する事も出来ます
locate_templateは、パスを走査して存在していれば、(第二引数以下の指定で、インクルード、インクルードワンスを指定します。)
インクルードしたり、boolを返す。
アクションフィルタなどはない。
サブディレクトリにあるテンプレートパートファイルをインクルードする場合には、この関数を使用する
テンプレートディレクトリ、スタイルシートディレクトリ以下のパスを走査するので、テーマの外部にあるファイルは、インクルードできない
get_template_part関数は、スタイルシートディレクトリと、テンプレートディレクトリのなかから、スラッグとサフィックスに合致するファイルを探し当てる関数。引数は$slugであり、パスを引数にしてはいけない
この関数は、
SSLチェックも行う
do_action( "get_template_part_{$slug}", $slug, $name );
アクションフックが使える
定数を使ったPHP関数のインクルードは、単にインクルードするだけで、SSLチェックも行わない。また、フックもない。
単にインクルードするだけで、locate_templateや、get_template_partといった関数を使うべきでない積極的な理由がなければ、使う理由がない。
テーマの外部にあるファイルのインクルードをPHPのインクルード関数を使って行うのは、ご法度
サブディレクトリにあるテンプレートパートファイルは、locate_templateを、そうでなければ、get_template_partを使う