ど素人から毛を生やす。<延>

現在のカテゴリの下階層までが表示されるカテゴリ一覧

Web > WordPress > カテゴリー 2016年1月6日(最終更新:8年前)

2016年1月6日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。

カテゴリが多くて多階層なサイトのサイドバーに良さそうなコードを作りました。

h280107

例えば「親」「子」「孫」カテゴリがあったとして、トップレベルは記事のあるもの全てが表示されます。
「親」ページのときは、「親」の下の「子」カテゴリ覧まで、
「子」ページのときは、「親」の下の「子」の下の「孫」カテゴリ一覧まで表示されます。
また、singleページは所属する全てのカテゴリが最下層まで表示されます。


function sideTermList($wp_query,$taxonomy){
	$customPostType = get_post_type();
	
	//所属するtermの取得
	$term_parents = array();
	$selected_term = array();
	if(is_category()||is_tax()||is_single()){
		if(is_single()){
			$term_now = get_the_terms($post->id, $taxonomy);
		}else if(is_category()||is_tax()){
			$page_taxonomy = $wp_query->get_queried_object();
			$term_now = get_term($page_taxonomy->term_id, $taxonomy);
		}
		if(is_array($term_now)){
				foreach($term_now as $term){
					$selected_term[] = $term->term_id;
					$term_parent = get_term($term->term_id, $taxonomy);
					for($i = 1; $i <= 100; $i++){
						$term_parents[] = $term_parent->term_id;
						if($term_parent -> parent == 0){
							break;
						}
						$term_parent = $term_parent -> parent;
						$term_parent = get_term($term_parent, $taxonomy);
					}
				}
		}else{
			$selected_term[] = $term_now->term_id;
			$term_parent = get_term($term_now->term_id, $taxonomy);
			for($i = 1; $i <= 100; $i++){
				$term_parents[] = $term_parent->term_id;
				if($term_parent -> parent == 0){
					break;
				}
				$term_parent = $term_parent -> parent;
				$term_parent = get_term($term_parent, $taxonomy);
			}
		}	
	}else{
		$term_parents[] = 0;
		$selected_term[] = 0;
	}
	
	//再帰関数termChildListの宣言
	function termChildList($terms_id,$term_parents,$selected_term,$taxonomy){
	$terms = get_terms( $taxonomy, 'parent='.$terms_id );
	foreach ($terms as $term){
		echo'<li'; if(in_array($term->term_id,$selected_term)===true)echo' class="current-cat"'; echo'><a href="'. get_term_link($term->slug, $taxonomy). '">'; echo $term->name; echo'</a>';
		if(in_array($term->term_id, $term_parents) === true){
			$categories = get_term_children( $term->term_id, $taxonomy );
			if(!empty($categories)){
				echo'<ul>';
				termChildList($term->term_id,$term_parents,$selected_term,$taxonomy);
				echo'</ul>';
			}
		}
		echo'</li>';
		}
	}
	
	//呼び出し
	$terms_id = 0;
	termChildList($terms_id,$term_parents,$selected_term,$taxonomy);
}

使うときは、


<ul>
<?php sideTermList($wp_query,'タクソノミー名'); ?>
</ul>

post投稿の場合は、'category'でおkです。
現在のカテゴリはliにcurrent-catクラスがつきます。
最上層のulは表示されないので、既存のulの中に設置することもできます。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)