【WordPress5.5以上対応】get_template_part()で変数を渡す方法

こんにちは!のせっち@nosecchi01です。

仕事柄WordPressコーディングを毎日やっています。

get_template_part()で変数を渡す方法がWordPress 5.5以降仕様変更となったため、解説します。

下記のような人にオススメです。

  • get_template_part()set_query()を使って変数を渡していたが、変数が渡らなくなった…。
  • include(locate_template())を使って変数を渡していたが、変数が渡らなくなった…。
  • Warning: Illegal string offset… というエラー文が出るようになった…。

それではいってみましょう。

get_template_part()の仕様変更

get_template_part()はWordPress5.5でコア部分の仕様変更があり、第三引数に変数を書くことで、別のテンプレートに変数を渡すことができるようになりました。

参考はこちら

Having the ability to pass a variable into get_template_part would be invaluable, it would really clean up the issues with using globals and to further cement it’s use rather than the alternative of a normal PHP include/require.

It would be the third variable passed into get_template_part, which I could pass it a string, array, object, or whatever I want really. Here’s an example of passing all the current scope’s variables:

日本語訳:

get_template_partに変数を渡す機能があれば、非常に便利です。グローバルを使用する際の問題が解消され、通常のPHPのinclude/requireの代わりに使用するよりも、さらに強固になります。
get_template_partに渡す3つ目の変数として、文字列、配列、オブジェクトなど、好きなものを渡すことができます。

まとめると、

get_template_partの第三引数として、変数を渡すことができるようになった。文字列でも配列でもオブジェクトでも渡すことができるようになった、ということです。

使い方

基本形はこちら

get_template_part( string $slug, string $name = null, array $args = array() )

参考

実際の使用例

公式だけ渡されてもわからないと思うので、実際の使用例を用いながら解説していきます。

下記のような感じで使います。

<?php
  get_template_part( 'templates/modules/cta.php', null, $args = array(
    'class' => 'c-button--primary',
    'data'  => array(
      'button-text' => '送信',
      'is-active' => true,
    ))
  );
?>
<?php
  if ( $args['class'] ) {
    echo $args['class'];
  }
?>

配列の場合は下記のように記述します。

<?php
  if ( $args['data'] ) {
    echo $args['data']['button-text'];
  }
?>

これで、get_template_part()を使って変数を渡すことができます。

古いバージョンの場合は?

今解説した方法はWordPress5.5以上で使えます。
当たり前ですが、ご自身の環境をバージョン5.5以上にしてお使いください。

バージョンを上げられない理由がある方は、下記記事で解説した方法を使ってください!

お疲れ様でした。

この記事を書いた人

のせっち

福岡県出身。早稲田大学卒。創業100年の鉄鋼商社でバンコク駐在最年少抜擢。毎日擦り切れるまで働かなくても幸せに生きている人々を見てフリーランスになりました。
現在は、主にバンコクでWeb制作、物販を中心に生きています。