WordPressでアーカイブテンプレートを制作する際に、1つのアーカイブテンプレートで複数のアーカイブタイプを定義する方法。

ソースコード

$args = array(
	"post_type"=> "post"
);
//カテゴリーアーカイブ
if(is_category()) {
$cat = get_query_var('cat');
if($cat) {
	$args_cat = array(
	"cat" => $cat
	);
	$args = array_merge($args , $args_cat);
}
}

//タグアーカイブ
if(is_tag()) {
$tag = get_query_var('tag');
if($tag) {
	$args_tag = array(
	"tag" => $tag
	);
	$args = array_merge($args , $args_tag);
}
}

//タクソノミーアーカイブ
if(is_tax()) {
$term = get_query_var('term');
$tax = get_query_var('taxonomy');
if($term) {
	$args_term = array(
	"tax_query" => array(
		array(
		'taxonomy' =>$tax,
		"field"=>"slug",
		"terms"=>$term
		)
	)
	);
	$args = array_merge($args , $args_term);
}
}
//年別・月別アーカイブ
$year = get_query_var('year');
if($year) {
	$args_year = array(
	"year"=> $year
	);
	$args =  array_merge($args , $args_year);
}
$month = get_query_var('monthnum');
if($month) {
	$args_month = array(
	"monthnum"=> $month
	);
	$args =  array_merge($args , $args_month);
}
$day = get_query_var('day');
if($day) {
	$args_day = array(
		"day"=> $day
	);
	$args = array_merge($args , $args_day);
}
$the_query = new WP_Query($args); 

解説

基本的に仕組みは現在表示しているページのアーカイブの種類をクエリから取得し、リクエスト条件を格納する配列にマージします。

$args = array(
	"post_type"=> "post"
);

$argsという配列でpost_typeを定義します。

//カテゴリーアーカイブ
if(is_category()) {
$cat = get_query_var('cat');
if($cat) {
	$args_cat = array(
	"cat" => $cat
	);
	$args = array_merge($args , $args_cat);
}
}
//タグアーカイブ
if(is_tag()) {
$tag = get_query_var('tag');
if($tag) {
	$args_tag = array(
	"tag" => $tag
	);
	$args = array_merge($args , $args_tag);
}
}

//タクソノミーアーカイブ
if(is_tax()) {
$term = get_query_var('term');
$tax = get_query_var('taxonomy');
if($term) {
	$args_term = array(
	"tax_query" => array(
		array(
		'taxonomy' =>$tax,
		"field"=>"slug",
		"terms"=>$term
		)
	)
	);
	$args = array_merge($args , $args_term);
}
}

カテゴリーアーカイブかどうかを「is_category」で判定し、「get_query_var(‘cat’)」でカテゴリー情報を取得します。

カテゴリー情報が取得できたら配列に格納して、PHPのarray_merge関数で、最初に定義した$argsにマージします。

あとはタグとカスタムタクソノミーも同じことの繰り返しで「is_tag」「is_tax」で判定し、クエリから情報を取得、取得できたら配列に格納して、$argsにマージします。

//年別・月別アーカイブ
$year = get_query_var('year');
if($year) {
	$args_year = array(
	"year"=> $year
	);
	$args =  array_merge($args , $args_year);
}
$month = get_query_var('monthnum');
if($month) {
	$args_month = array(
	"monthnum"=> $month
	);
	$args =  array_merge($args , $args_month);
}
$day = get_query_var('day');
if($day) {
	$args_day = array(
		"day"=> $day
	);
	$args = array_merge($args , $args_day);
}
$the_query = new WP_Query($args); 

年別、月別、日別などの時系列のアーカイブはアーカイブタイプの判定処理を行いません。
これはタクソノミーと時系列を組み合わせる場合があるからです。

get_query_var関数で時系列のクエリ情報が取得できた場合だけ、リクエスト用の配列にマージする形です。

コメントを残す

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




アーカイブ

カテゴリ