WordPressでカテゴリー名やカテゴリーIDの取得方法でどれを使うのが最適なのかいつも分からなくなるのでメモ。
Contents
おさらい
タクソノミー とは?
- カテゴリー(WP標準で用意されているタクソノミー )
- タグ(WP標準で用意されているタクソノミー )
- カスタムタクソノミー (独自で追加するタクソノミー の総称)
タームとは?
例えば美味しい食べ物について発信するブログを書いていた場合、カテゴリーとタームの関係は以下のようになる。
タクソノミー 名 | ターム名 | タームID | タームスラッグ |
カテゴリー | 和食 | 1 | japanese |
中華料理 | 2 | chinese | |
イタリアン | 3 | italian |
正式に言えば、タームとは「タクソノミー におけるそれぞれの項目名のこと」である。
本題
本題の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
を使った取得が可能ですがより詳しくは引用元であるこちらのブログを見てみてください。