WordPressのカテゴリー取得方法まとめ

WordPressでカテゴリー名やカテゴリーIDの取得方法でどれを使うのが最適なのかいつも分からなくなるのでメモ。

おさらい

タクソノミー とは?

  • カテゴリー(WP標準で用意されているタクソノミー )
  • タグ(WP標準で用意されているタクソノミー )
  • カスタムタクソノミー (独自で追加するタクソノミー の総称)

タームとは?

例えば美味しい食べ物について発信するブログを書いていた場合、カテゴリーとタームの関係は以下のようになる。

タクソノミー 名ターム名タームIDタームスラッグ
カテゴリー和食1japanese
中華料理2chinese
イタリアン3italian

正式に言えば、タームとは「タクソノミー におけるそれぞれの項目名のこと」である。

本題

本題のget方法ですが基本はget_terms()を使うのですが、標準で用意されているタクソノミー であるカテゴリーにおいてはget_the_category()関数が用意されています。

ややこしい点

ややこしいのはget_the_category()では投稿が0件のカテゴリーを取得してくれなかったり、値を取得したいページのタイプ(single, page, category, index)によってそれぞれの関数が使えたり使えなかったりする点です。

標準で用意されているカテゴリーの取得の場合

<?php
  $category = get_the_category();
  $cat_id   = $category[0]->cat_ID;
  $cat_name = $category[0]->cat_name;
  $cat_slug = $category[0]->category_nicename;
?>

<!-- カテゴリーIDを表示したい所に -->
<?php echo $cat_id; ?>

<!-- カテゴリー名を表示したい所に -->
<?php echo $cat_name; ?>

<!-- カテゴリースラッグを表示したい所に -->
<?php echo $cat_slug; ?>

カテゴリIDだけはget_query_var()を使って取得することもできるが汎用性のあるget_the_category()を使うのが分かりやすいと思われる。

$cat_id = get_query_var('cat');

投稿が0件のカテゴリーも取得したい場合

$categories = get_terms('category', Array('hide_empty' => false));
print_r($categories);

カスタムタクソノミーの場合

<?php 
// タームを全て取得する
$terms = get_terms('brand'); // 返り値はオブジェクト

////  全てのターム一覧ををリンク付きで出力
foreach ( $terms as $term ) {
    echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
}

// 現在のタームを取得する
$terms  = wp_get_post_terms($post->ID, 'brand')
$current_term_name = $terms[0]->name;

//// 現在のタームをリンク付きで出力
foreach ( $terms as $term ) {
    echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
}
?>

ちょっとこの使い分けが分からなくなったので、また使うときに記事更新していきます。

get_term_by()

$name = single_cat_title( '', false );
$term_meta = get_term_by( 'name', $name, 'category' );
var_dump( $term_meta->term_id );

その他

他にもwp_queryを使った取得が可能ですがより詳しくは引用元であるこちらのブログを見てみてください。

https://tenman.info/labo/snip/archives/7741

参照

WordPress で記事数が0件のカテゴリも取得する方法 | ウェブル