get_template_part に引数を渡してテンプレートファイルを柔軟に利用する

  • ページ内で繰り返し使うパーツをコンポーネント化して再利用するのに役立つ get_template_part()
  • ただ、取り出した情報を、取り出す場所によって変えたい時(例えば、表示件数を変えたり、ソート順を変えたりなど)に柔軟に対応できない
  • と思っていたら、バージョン 5.5 から get_template_part() に引数を渡せるようになっていたらしい

試しにカテゴリー一覧リンクの表示形式を変えてみる

  • サイドバーに表示するカテゴリー一覧だけ「投稿件数を表示」したかったので、当該部分で呼び出すファイルに以下のような感じで書く
<?php // カテゴリー一覧
$args = ['pad_counts' => true];
get_template_part('tmp/categories-link', null, $args); ?>
  • 上記で、例えばモーダルウィンドウでは件数表示が不要なら 'pad_counts' => false と記述すればよいことになる
  • 続いて、呼び出される側の tmp/categories-link.php
<?php if ( !defined( 'ABSPATH' ) ) exit; ?>

<?php // カテゴリー
  $args = array(
    'parent' => 0, // 親カテゴリーのみ一覧で取得
    'orderby' => 'term_order',
    'order' => 'ASC',
    'hide_empty' => false, // 記事のないカテゴリーも含める
    'exclude' => 1, // 「未分類」のカテゴリーを除外
    'pad_counts' => $args['pad_counts'], // 記事数のカウント表示の有無(引数で取得する)
  );
  $categories = get_categories( $args );
?>

<nav class="categories-link">
  <ul class="categories-link__ul">
  <?php foreach( $categories as $category ) : ?>
    <li class="categories-link__list">
      <a class="categories-link__href" href="<?php echo get_category_link( $category->term_id ); ?>">
        <?php if($args['pad_counts'] == true): ?>
        <?php echo $category->name; ?> (<?php echo $category->count; ?>)
        <?php else: ?>
        <?php echo $category->name; ?>
        <?php endif; ?>
      </a>
    </li>
  <?php endforeach; ?>
  </ul>
</nav>
  • 引数として受け取った値を配列に入れ、その結果をまた返してくれるといったニュアンスなので、WP Query を駆使したサイトなどでは必須の機能と言えるかもしれない

参考