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

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

目次

コード

<?php
  $terms = get_terms( 'custom-post-taxonomy' ); // タクソノミー名
  $term_ids = wp_list_pluck( $terms, 'term_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,
        ),
      ),
    )
  );
?>
  <div>
    <ul>
      <?php if ( $query->have_posts() ): while ( $query->have_posts() ) : $query->the_post();?>
        <li>
          <article>
            <a href="<?php the_permalink() ?>">
              <?php if( has_post_thumbnail() ): ?>
                <?php the_post_thumbnail(); ?>
              <?php else: ?>
                <img src="<?php bloginfo('template_url'); ?>/images/common/noimage.png" alt="" />
              <?php endif; ?>
              <div>
                カテゴリー:
                <?php
                  if ($terms = get_the_terms($post->ID, 'custom-post-taxonomy')) {
                    foreach ( $terms as $term ) {
                      echo '<span>' .$term->name. '</span>';
                    }
                  }
                ?>
              </div>
              <div><?php the_time('Y.m.d'); ?></div>
              <div><?php the_title(); ?></div>
            </a>
          </article>
        </li>
        <?php endwhile; endif; wp_reset_postdata(); ?>
    </ul>
  </div>

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をコピーしました!

コメント

コメントする

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

目次