WordPressカスタマイズ事例

アーカイブページで、ターム(カテゴリ)ごとに分けて記事一覧を表示する

いろいろ製品があってそれをカテゴリ、ジャンルごとに分けて一覧表示したい、というニーズは結構あります。
そんなときの解決方法をご紹介。

テーマのカスタム投稿アーカイブページ(ここでは archive-items.php )の記事一覧表示部分をこんな感じで記述します。

<?php
// カスタム投稿タイプ
$post_type = 'items';
// カスタム分類名
$taxonomy = 'items_cat';

// パラメータ
$args = array(
	// 親タームのみ取得
	'parent' => 0,
	// 子タームの投稿数を親タームに含める
	'pad_counts' => false,
	// 投稿記事がないタームは取得しない
	'hide_empty' => true,
	'orderby'=> 'order'
);

// カスタム分類のタームのリストを取得
$terms = get_terms( $taxonomy , $args );

if ( count( $terms ) != 0 ) {
	// 親タームのリスト $terms を $term に格納してループ
	foreach ( $terms as $term ) {

		// 親タームのURLを取得
		$term = sanitize_term( $term, $taxonomy );
		$term_link = get_term_link( $term, $taxonomy );
		if ( is_wp_error( $term_link ) ) {
			continue;
		}

		$slug = $term->slug;

		// 親タームのURLと名称とカウントを出力
		echo '<h2><a href="' . esc_url( $term_link ) . '" >' . $term->name . '</a></h2>
			<div>';

		$posts = get_posts( array(
			'post_type' => $post_type,
			'taxonomy' => $taxonomy,
			'term' => $slug,
			'posts_per_page' => -1,
			'meta_key' => 'order_num',
			'orderby'     => 'date',
			'order'	=>	'DESC'
		));

		foreach($posts as $post){

			setup_postdata( $post );

			$image_url = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'medium' );
			$image_url_hon = $image_url[0];
?>

			<div>
				<a href="<?php the_permalink(); ?>" ><img src="<?php echo $image_url_hon; ?>" /></a>
				<p><a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a></p>
			</div>

<?php

		}
		wp_reset_query();
 ?>
		</div>
	<?php }
} ?>

その他のWordPressカスタマイズ事例