タクソノミーのアーカイブを擬似的に作り出す

タクソノミーのアーカイブ(つまり、タクソノミー内のいずれかのタームに属するものの全一覧)を作りたかったんだが、普通にhttp://xxxxx.com/タクソノミースラッグ/とかやっても出てこなかった。

 

まぁ、それもそのはず。

このタクソノミースラッグって要はカテゴリーで言うところのcategory(URLに直すとhttp://xxxxx.com/category/)なわけだし、そんなところにアクセスしたとしても当然アーカイブなんてものは存在はしない。

 

でも今作ってるワンオフサイトの仕様上、どうしてもタクソノミーのアーカイブを作りたかったわけで、それを擬似的に作り出すようにしてみた。

 

まず前提。

タクソノミーアーカイブからは少し離れてみて、トップページの記事一覧とは別に投稿の記事一覧を表示する方法がある。

固定ページに対してWP_Queryやget_postsでpost_type=’post’を指定して、擬似的なアーカイブを作り出すという一般的な方法である。

 

要は、既に記事一覧のアーカイブをトップページで使ってるやん!なら固定ページに本来の記事のアーカイブを出してくるようにコードを書けばいいやん!ということである。

 

で、タクソノミーアーカイブに話を戻すと、単にこれがタクソノミーに置き換わるだけの話であり、もとを正せば、これと同じ仕組みを利用すればいいのである。

つまり、アーカイブ化したいタクソノミー内のいずれかのタームに属するものの記事を全て取ってくればいいということだ。

 

準備として、

  1. 固定ページにタクソノミーアーカイブとして表示する空のページを登録する。
  2. テーマ側に「page-固定ページスラッグ.php」というのを用意する。

以上のことをやっておく。

 

準備ができたら、今度は2.の「page-固定ページスラッグ.php」でタクソノミーのアーカイブを引っ張ってくるようにする。

そのために「page-固定ページスラッグ.php」には以下の例のようにテンプレートを記述する。

(この例ではWP_Queryを用いている。)

global $wp_query;

$post_type = 'post_type_slug';
$tax_slug = 'taxonomy_slug';
$terms = get_terms( $tax_slug );
$array = array();

foreach( $terms as $term ) :
	array_push( $array, $term->term_id );
endforeach;

$query = new WP_Query(
	array(
		'post_type' => $post_type,
		'tax_query' => array(
			array(
				'taxonomy' => $tax_slug,
				'terms' => $array,
				'field' => 'term_id',
				'operator' => 'IN',
			),
		),
		'paged' => get_query_var( 'paged' ),
	)
);

$wp_query->max_num_pages = $query->max_num_pages;

if ( $query->have_posts() ) :

	while ( $query->have_posts() ) : $query->the_post();
		~~~
	endwhile;


endif;

wp_reset_postdata();

$tax_slugには、直書きなりプラグインを利用して作ったタクソノミーのスラッグ名を入れる。

$post_typeはタクソノミーが投稿タイプへの一意の設定であれば別にいらないと思う。(念の為に入れてるけど)

 

試してないが恐らくページャーやページネーションにも対応できている…はず。

(自分のテスト上では特に問題なかったけど)できてなかったらごめんね!

カテゴリ

この記事のコメント

コメントはないです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です