get_template_part()に引数を渡して効率よくパーツを使う
皆様こんにちは塩田です。
今日はWordPressでサイト構築する際によく使用されるget_template_part関数の効率的な使い方をご紹介します。
WordPressでサイトを構築する際にボタンなどよく使うものについてはパーツ化してget_template_part関数で呼び出して使い回すと思いますが、一部微妙に内容が違ったりする場合がありますよね。
そういった際に逐一似たようなパーツを作るのではなく、このget_template_part関数に引数を渡すことでより柔軟に使い回しができるようになります。以下に簡単な例を紹介させていただきます。
get_template_part関数とは
改めて説明するまでもないですが、パーツ化したモジュールを呼び出す関数です。
皆様サイトを構築していると、「またこの処理か・・・」「これさっき作ったよな・・・」みたいなことは頻繁に起こると思います。LaravelやVue.jsなどではslotで対応していきますが、WordPressでは残念ながらそのような機能はありません。
そのWordPressでよくある例としては、ボタンやループ処理の際の関数だと思います。そしてこれらを使用するたびに逐テンプレートに記載していたら可読性や保守性を考えるうえであんまりよろしくないので、このget_template_part関数でパーツとして呼び出してやるのです。
何が問題か
使い回せるには良いのですが、よくあるパターンとしてボタンのスタイルは同じなのにテキストやリンクが違うということがあると思います。ページ数があまり多くないのであれば各々パーツを作っても良いかもしれませんが、ページや階層が増えてくると管理も難しくなってくると思います。
例)スタイルは同じだがテキストやリンクが違うボタン
//button-contact.php(お問い合わせ用のボタン) <div class="Btn"> <a class="hoge" href="<?= esc_url( home_url( '/contact' ); ?>" target="_blank" >お問い合わせはこちら</a> </div> //company-company.php(会社案内用のボタン) <div class="Btn"> <a class="hoge" href="<?= esc_url( home_url( '/company' );?>" target="_blank">会社案内はこちら</a> </div> //お問い合わせ用のボタンを呼び出す <?php get_template_part('button-contact');?> //会社案内用のボタンを呼び出す <?php get_template_part('button-company');?>
上記の例はリンクが貼られたボタンですが、スタイルが同じなのにもかかわらずテキストやリンクが異なるため別々に作って呼び出しています。これなら逐一テンプレートに記述するのとあまり変わりませんよね。
解決策
get_template_part関数に引数を渡してやることにより上記の例は1つのパーツで事足りるようになります。
※WordPress本体のバージョンが5.5以上である必要があります。
get_template_part( string $slug, string $name = null, array $args = array() )
//テンプレート側(お問い合わせへのリンクの場合) <div> <?php $args = ['text' => 'お問い合わせ', 'link' => 'contact']; //ここで引数を設定 get_template_part('parts/button', null, $args); //第三引数に上記の配列を設定 ?> </div> //テンプレート側(会社案内へのリンクの場合) <div> <?php $args = ['text' => '会社案内', 'link' => 'company']; //ここで引数を設定 get_template_part('parts/button', null, $args); //第三引数に上記の配列を設定 ?> </div> //パーツ側(button.php) <div class="Btn"> <a href="<?php !isset($args['link']) ? print esc_url(home_url('/')) : print esc_url(home_url($args['link'])); ?>" class="btn01-link"><?php !isset($args['text']) ? print "TOPページ" : print $args['text']; ?></a> </div>
ちなみにget_template_part関数の第三引数ですが、配列以外に文字列やオブジェクトも設定できます。
また注意点ですが、受け取り側(パーツ側)の配列名は必ず$argsである必要があります(送る側は何でもOK)。
如何でしたでしょうか?
ちょっとしたことですが、こうした小さな積み重ねによりサイト構築の効率が上がっていきますよね。
また構築の際に楽ができるだけでなく構築したあともメンテナンスがより楽になりますので積極的に活用していきたいですね。
ではまた。