WordPressのget_categories()を使って、色々な形でカテゴリーを取得してみます。
パラメータを設定しない場合
まずはget_categories()にパラメータを設定せずに試してみます。
今回は以下のようなカテゴリーを用意しました。
- カテゴリーA(ID:1, slug:cata) 投稿数: 2件
- カテゴリーA-1(ID:5, slug:cata-1) 投稿数: 1件
- カテゴリーB(ID:3, slug:catb) 投稿数: 1件
- カテゴリーB-1(ID:7, slug:catb-1) 投稿数: 0
- カテゴリーC(ID:4, slug:catc) 投稿数: 0件
- カテゴリーD(ID:6, slug:catd) 投稿数: 0件
- カテゴリーD-1(ID:8, slug:catd-1): 投稿数1件
よく使いそうな以下の5つを出力してみます。
PHP
<ul> <?php $categories = get_categories(); ?> <?php foreach($categories as $category) : ?> <li> カテゴリー名: <?php echo $category->name; ?> スラッグ: <?php echo $category->slug; ?> ID: <?php echo $category->term_id; ?> 投稿数: <?php echo $category->count; ?> 親カテゴリーID: <?php echo $category->parent; ?> </li> <?php endforeach; ?> </ul>
実際に確認してみると、以下のように出力されました。
(見やすいように改行位置など調整しています。)
HTML
<ul> <li> カテゴリー名: カテゴリーA スラッグ: cata ID: 1 投稿数: 2 親カテゴリーID: 0 </li> <li> カテゴリー名: カテゴリーA-1 スラッグ: cata-1 ID: 5 投稿数: 1 親カテゴリーID: 1 </li> <li> カテゴリー名: カテゴリーB スラッグ: catb ID: 3 投稿数: 1 親カテゴリーID: 0 </li> <li> カテゴリー名: カテゴリーD スラッグ: catd ID: 6 投稿数: 0 親カテゴリーID: 0 </li> <li> カテゴリー名: カテゴリーD-1 スラッグ: catd-1 ID: 8 投稿数: 1 親カテゴリーID: 6 </li> </ul>
設定できるパラメータ
get_categories()に設定できるパラメータを見てみます。
type | 取得するカテゴリーの種別を指定。 初期値はpost。 |
---|---|
child_of | 指定したカテゴリーIDの子孫カテゴリーを取得。 初期値は0。 |
parent | 指定したカテゴリーIDの直接の子カテゴリーのみを取得。 初期値は”。 |
orderby | 指定した項目のアルファベット順またはカテゴリーID順でカテゴリーを並べ替える。 設定できる値はid,name,slug,count,term_groupで、初期値はname。 |
order | 並べ替えの昇順・降順を指定。 設定できる値はasc,descで、初期値はASC。 |
hide_empty | 記事のないカテゴリーを排除するかどうかを指定。 設定できる値は1(隠す),0(含める)で、初期値は1。 child_ofが指定されている場合は自動的falseになる。 |
hierarchical | 1の場合、 記事のない空のカテゴリーで、その子カテゴリーが空カテゴリーでない場合に、その親カテゴリーを含めるかどうか。 設定できる値は1(含める),0(含めない)で、初期値は1。 |
exclude | 一つまたは複数のカテゴリーを除外する。 初期値は”。 |
include | 指定したカテゴリーのみを含めるようにする。 初期値は”。 |
number | 取得するカテゴリー数の上限を指定。 初期値は”。 |
taxonomy | カテゴリーの代わりに指定したタクソノミーから取得。(3.0~) 登録しているタクソノミーを指定する形で、初期値はcategory。 |
pad_counts | 子カテゴリーを含めて、リンクまたは投稿の数を計算するかどうか。 設定できる値は1(計算する),0(計算しない)で、初期値は0。 |
パラメータを使用する場合、配列形式もしくはクエリ文字列形式で引数に指定します。
例えば、配列形式でchild_ofを使ってみます。
PHP
<ul> <?php $arr = array( 'child_of' => 1, ); $categories = get_categories($arr); ?> <?php foreach($categories as $category) : ?> <li><?php echo $category->name; ?></li> <?php endforeach; ?> </ul>
カテゴリーIDが1なのはカテゴリーAで、その子孫カテゴリーを取得するので、カテゴリーA-1のみ取得できました。
HTML
<ul> <li>カテゴリーA-1</li> </ul>
上記サンプルをクエリ文字列形式で指定する場合、以下のようになります。
PHP
<ul> <?php $categories = get_categories('child_of=1'); ?> <?php foreach($categories as $category) : ?> <li><?php echo $category->name; ?></li> <?php endforeach; ?> </ul>
投稿のないカテゴリーも取得する
デフォルトだと投稿のないカテゴリーは除外されますが、投稿のないカテゴリーも合わせて取得したい場合、hide_empty:0を指定します。
PHP
<ul> <?php $arr = array( 'hide_empty' => 0, ); $categories = get_categories($arr); ?> <?php foreach($categories as $category) : ?> <li><?php echo $category->name; ?></li> <?php endforeach; ?> </ul>
全カテゴリーを取得することができました。
HTML
<ul> <li>カテゴリーA</li> <li>カテゴリーA-1</li> <li>カテゴリーB</li> <li>カテゴリーB-1</li> <li>カテゴリーC</li> <li>カテゴリーD</li> <li>カテゴリーD-1</li> </ul>
並び順を変更する
並び順を変更したい場合、orderbyやorderを使用します。
orderbyで並び順の基準になる項目を変更できます。
PHP
<ul> <?php $arr = array( 'hide_empty' => 0, 'orderby' => 'id', ); $categories = get_categories($arr); ?> <?php foreach($categories as $category) : ?> <li><?php echo $category->name; ?></li> <?php endforeach; ?> </ul>
並び順をid順に変更できました。
HTML
<ul> <li>カテゴリーA</li> <li>カテゴリーB</li> <li>カテゴリーC</li> <li>カテゴリーA-1</li> <li>カテゴリーD</li> <li>カテゴリーB-1</li> <li>カテゴリーD-1</li> </ul>
orderで昇順・降順の変更ができます。
PHP
<ul> <?php $arr = array( 'hide_empty' => 0, 'orderby' => 'id', 'order' => 'desc', ); $categories = get_categories($arr); ?> <?php foreach($categories as $category) : ?> <li><?php echo $category->name; ?></li> <?php endforeach; ?> </ul>
降順に変更できました。
HTML
<ul> <li>カテゴリーD-1</li> <li>カテゴリーB-1</li> <li>カテゴリーD</li> <li>カテゴリーA-1</li> <li>カテゴリーC</li> <li>カテゴリーB</li> <li>カテゴリーA</li> </ul>
最上位のカテゴリーのみを取得する
parentを0に指定することで、最上位のカテゴリーのみを取得することができます。
PHP
<ul> <?php $arr = array( 'parent' => 0, ); $categories = get_categories($arr); ?> <?php foreach($categories as $category) : ?> <li><?php echo $category->name; ?></li> <?php endforeach; ?> </ul>
最上位で投稿のあるカテゴリーのみを取得できました。
HTML
<ul> <li>カテゴリーA</li> <li>カテゴリーB</li> <li>カテゴリーD</li> </ul>
カテゴリーを指定して取得する
指定したカテゴリーのみ取得、指定したカテゴリーのみ除外することもできます。
指定したカテゴリーのみ取得したい場合、includeにカンマ区切りでカテゴリーIDを指定します。
PHP
<ul> <?php $arr = array( 'include' => '1,6', ); $categories = get_categories($arr); ?> <?php foreach($categories as $category) : ?> <li><?php echo $category->name; ?></li> <?php endforeach; ?> </ul>
カテゴリーIDが1のカテゴリーAとカテゴリーIDが6のカテゴリーDのみ取得できました。
HTML
<ul> <li>カテゴリーA</li> <li>カテゴリーD</li> </ul>
指定したカテゴリーを除外したい場合、excludeを使用します。
PHP
<ul> <?php $arr = array( 'hide_empty' => 0, 'exclude' => '1,6', ); $categories = get_categories($arr); ?> <?php foreach($categories as $category) : ?> <li><?php echo $category->name; ?></li> <?php endforeach; ?> </ul>
hide_empty:0 で全記事取得して、excludeでカテゴリーAとカテゴリーDを除外しました。
HTML
<ul> <li>カテゴリーA-1</li> <li>カテゴリーB</li> <li>カテゴリーB-1</li> <li>カテゴリーC</li> <li>カテゴリーD-1</li> </ul>
カスタムタクソノミーを取得する
ニュース(news)というカスタム投稿を作成して、ニュースに紐づくカスタムタクソノミー(news_cat)を取得してみます。
カスタムタクソノミーの中は以下のようになっています。
- ニュースカテゴリーA(ID:9, slug:news-cata) 投稿数: 1件
- ニュースカテゴリーA-1(ID:12, slug:news-cata-1) 投稿数: 1件
- ニュースカテゴリーB(ID:10, slug:news-catb) 投稿数: 1件
- ニュースカテゴリーC(ID:11, slug:news-catc) 投稿数: 1件
カスタムタクソノミーを取得する場合、taxonomyを使います。
PHP
<ul> <?php $arr = array( 'taxonomy' => 'news_cat', ); $categories = get_categories($arr); ?> <?php foreach($categories as $category) : ?> <li><?php echo $category->name; ?></li> <?php endforeach; ?> </ul>
HTML
<ul> <li>ニュースカテゴリーA</li> <li>ニュースカテゴリーA-1</li> <li>ニュースカテゴリーB</li> <li>ニュースカテゴリーC</li> </ul>
【参考サイト】
コメントが承認されるまで時間がかかります。