読者です 読者をやめる 読者になる 読者になる

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を使う