BBH
-Biz Branding Hub-
投稿日 : 
2019/08/20
更新日 : 
2019/08/20

WordPressで子カテゴリも含めたカテゴリ一覧のサンプル

今回はWordpressのサイドバーなどでよくみられるようなカテゴリ一覧の実装サンプルを紹介します。
イメージ的には以下のような感じです。

サイドバーカテゴリリストサンプル

サンプルコードは以下です。

sidebar.php

<ul class="Sidebar_Navigation_List_Ul">
		<?php
			$categories = get_only_root_categories();
			foreach( $categories as $category ) : if($category->count > 0):
		?>
			<li class="Sidebar_Navigation_List_Li">
				<a href="<?php echo get_category_link($category->term_id) ?>"><?php echo $category->name ?></a>
				
				<?php //========== 子カテゴリを表示 - start ==========
					$chirdren_cat_ids = get_term_children($category->term_id, 'category'); //子カテゴリのIDの配列を取得
					if($chirdren_cat_ids) :
				?>
					<ul class="Sidebar_Navigation_List_Child_Ul">
						<?php 
							foreach($chirdren_cat_ids as $child_cat_id) :
								$child_cat = get_category($child_cat_id);
								if($child_cat->count > 0) :
						?>
							<li class="Sidebar_Navigation_List_Child_Li">
								<a href="<?php echo get_category_link($child_cat->term_id) ?>"><?php echo $child_cat->name ?></a>
							</li>
						<?php endif; endforeach; ?>
					</ul>
				<?php endif; 
					  //========== 子カテゴリを表示 - end ==========?>

			</li>
		<?php endif; endforeach; ?>
	</ul>

function.php

function get_only_root_categories() {
  $categories = array_filter(get_categories(), function($obj){
    return ($obj->category_parent == 0 && $obj->term_id !== 1);  //1 = Uncategorized
  });
  return $categories;
}

まず、get_only_root_categories() で親カテゴリのみを取得しています。
それをforeachで回して、リンクを生成します。
echo get_category_link($category->term_id) でリンクのhref属性を生成。
echo $category->name でリンクのテキストを生成します。

もし、そのカテゴリが子カテゴリを持っている場合は、入れ子でリンクを生成します。
get_term_children($category->term_id, 'category') で子カテゴリのIDの配列を取得します。
if($chirdren_cat_ids) :でIDがある場合は、子リストを生成します。

今回は、2階層までしか出していませんが、孫まで出したいという場合は、ループを一階層増やせばよいです。

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend