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

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

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

このページは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)