get_template_partで呼び出したテンプレートに値を渡す方法

WordPress

今回はWordPressネタを書こうと思います。
タイトルのとおり「get_template_part」でテンプレートを呼び出す際に、値を呼び出した先のテンプレートでも使う方法を紹介します。

例えばindex.phpでこのようなループがあったとします。

get_posts( $args );
if (have_posts()) : while (have_posts()) : the_post();
get_template_part('content');
endwhile; endif;
wp_reset_query();

通常このcontent.phpに変数を引数として与えることは出来ないので、基本的にはcontent.php内で使いたい値はcontent.phpで作成することが多いです。
ただ、どうしてもinde.phpで作った値を渡したいこともありますよね。

例えばこのforeachをfor文に書き換えたときなど、$post->IDをinde.phpで作成してもcontent.phpに渡せないとタイトルなどが表示できないのです。

とまあ、マニアックな使い方ではありますが、高速なテーマを作りたいときなどにforを使いたいなどあると思います。

前書きが長くなりましたがさくっとご紹介しますね

値を渡す側(index.php)

set_query_var( 'postid', $post->ID);

値を受け取る側(content.php)

$postID = get_query_var('postid');

便利な[get_query_var]と[set_query_var]という関数がWordPressにはデフォルトで用意されているみたいでした。

使い方としてはまずset_query_varに渡したい値をセットします。
第一引数に「渡したい値の名前」をつけてあげます。
今回はpostidという名前をつけました。

第二引数には渡したい値を入れます。
今回は変数ですが文字列も出来ます。

今回の場合は[$post->ID]に[postid]と言う名前をつけて値を渡しますと言うことですね。
少しややこしいですが仕様なので従いましょう。

次に受け取る側ですが、get_query_varの第一引数に、set_query_varで指定した名前を指定します。
今回の場合はpostidですね。

使い方はこれだけです。
古いブログにはglobal変数を使うとか書いてある記事もありますが、個人的にはあまりglobalを多用するのはいかがなものか?と思っているので、デフォルトのこちらの方法を使いました。

あまりこのタグの情報が無いため、探すのに苦労しました。
参考になれば幸いです。

それでは次回の記事でお会いしましょう。

コメント

タイトルとURLをコピーしました