指定したタクソノミー内のタームに、一つでも所属していたら表示させる

記事一覧を表示させる際に、指定したタクソノミーに一つでも所属していたら表示させる方法です。
tax_queryにすべてのタームを含めていきます。

目次

どんな時に使用したのか

まず前提として、複数のタクソノミーとタームが存在します。

  • 大まかな業務内容A(タクソノミー1)
    • 業務内容詳細A-01
    • 業務内容詳細A-02
    • 業務内容詳細A-03
  • 大まかな業務内容B(タクソノミー2)
    • 業務内容詳細B-01
    • 業務内容詳細B-02
    • 業務内容詳細B-03
  • 大まかな業務内容C(タクソノミー3)
    • 業務内容詳細C-01
    • 業務内容詳細C-02
    • 業務内容詳細C-03

コラムページや担当スタッフページ、FAQ(すべてカスタム投稿タイプで作成)などにこのタームが紐づけられています。
もちろん、一つのページに対して複数のタームに所属しています。

  • スタッフ01の所属ターム
    • 業務内容詳細A-01
    • 業務内容詳細C-02
  • スタッフ02の所属ターム
    • 業務内容詳細A-02
    • 業務内容詳細B-01
  • スタッフ03の所属ターム
    • 業務内容詳細C-02

そしてそれを、大まかな業務内容ごとに、カスタム投稿や固定ページなど任意の場所に表示させたい、という内容でした。

コード

<ul>
  <li>
    業務内容Aのスタッフ一覧
    <?php
      $terms = get_terms( 'custom-post-taxonomy' ); // タクソノミー名
      $term_ids = wp_list_pluck( $terms, 'term_id' ); // 投稿情報の配列から、所属タームIDを取得し変数に格納

      $query = new WP_Query(
        array(
          'post_type' => 'custom-post', // 投稿タイプ名
          'posts_per_page' => 3,
          'tax_query' => array(
            array(
              'taxonomy' => 'custom-post-taxonomy', // タクソノミー名
              'field' => 'term_id',
              'terms' => $term_ids,
            ),
          ),
        )
      );
    ?>
    <ul>
      <?php if ( $query->have_posts() ): while ( $query->have_posts() ) : $query->the_post();?>
        <li>
          <a href="<?php the_permalink() ?>">
            <?php the_title(); ?>
          </a>
        </li>
        <?php endwhile; endif; wp_reset_postdata(); ?>
    </ul>
  </li>
</ul>

出力結果

wp_list_pluckとは

wp_list_pluck – 配列内のオブジェクトまたは連想配列から特定の値だけを抽出する関数です。

wp-includes/functions.php で定義されている

function wp_list_pluck( $list, $field, $index_key = null ) {
	if ( ! is_array( $list ) ) {
		return array();
	}

	$util = new WP_List_Util( $list );

	return $util->pluck( $field, $index_key );
}

その他使用例

投稿情報の配列から投稿タイトルを抽出する。

<?php $titles = wp_list_pluck( $posts, 'post_title' ); ?>

投稿情報の配列から投稿タイトルを抽出し、投稿IDがキーの配列に格納する。

<?php $titles = wp_list_pluck( $posts, 'post_title', 'ID' ); ?>
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次