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

現在記事のカテゴリを特定の親に属するものだけ表示

Web > WordPress > カテゴリー 2014年5月20日(最終更新:3年前)

このページは2014.5.20に作成されています。時代の流れとそぐわない可能性があったり、僕が今以上のど素人だった頃の記事だったりするので、新しい記事を探してみるのも良いかもしれません。

どもです。
近頃、首と肩が重い餅。です。

今日も今日とてWordPress。

企業サイトだと、こういうのやりたいとき、ありますよね。

品名:チョコモナカアイス
カテゴリ:アイスクリーム
会社:○○アイス社

表示させるだけなら「会社」をカスタムフィールドにすることも可能ですが、
それだと検索させるのも一苦労ですし、登録するのもやや面倒です。

だから、カテゴリ構造を、

カテゴリ
⌊ アイスクリーム
会社
⌊ ○○アイス社

と登録する。
のは良いのですが、これだとページに表示させるときに、普通にカテゴリを出力すると、

カテゴリ:アイスクリーム,○○アイス社

になってしまいます。
これは困る。

ので、上のようなカテゴリ構造にしたとき、
「現在記事の、特定の親カテゴリに属するカテゴリ」を出力させてみました。

<?php $categorys = get_the_category( $post_id ); ;
foreach($categorys as $category){
if($category->parent==表示させたい親カテゴリID):
echo $category->name;
endif;
}; ?>

手順としましては、
①現在記事のカテゴリを取得→ひとつずつ配列に入れる
②配列を、foreachでループ
③親カテゴリIDが特定のもののとき、カテゴリを書き出す

といった感じです。
勿論、echo $category->nameのところで、
<?php $c_link = get_term_link($category->slug,'category'); echo $c_link; ?>など、URLを取得しリンク付きにしてしまうことも可能です。

複数のカテゴリが表示される場合は区切り文字を入れるために、
ループの前に$print="";辺りをセットしておいて、
中身を$printにカンマ区切りで挿入していって、最後に
$print = substr($print, 0, -1);
しておけば最後のカンマだけ消えてくれます。

 

さて、このやり方は、get_the_categoryをget_the_termsに置き換えれば
カスタム投稿でも同じことができます。

<?php $customPostType = get_post_type();
$terms = get_the_terms($post->ID, $customPostType.'_ca');
foreach($terms as $term){
if($term->parent==表示させたい親カテゴリID):
echo $term->name;
endif;
}; ?>

get_the_termsを使うときはタクソノミーを指定しなければならないので注意です。
餅。の基本方針は、
タクソノミー(カテゴリ)名=カスタム投稿名_ca
なので、以上の記述で良いのですが
その他の方は$customPostType.'_ca'のところをタクソノミー名に変更してください。

 

ちなみに、カスタム投稿でカンマ区切りとリンクまでつけたサンプルがこちら。

<?php $customPostType = get_post_type();
$terms = get_the_terms($post->ID, $customPostType.'_ca');
$print="";
foreach($terms as $term){
if($term->parent==表示させたい親カテゴリID):
$term_name = $term->name;
$term_url = get_term_link($term->slug,$customPostType.'_ca');
$print = $print.'<a href="'.$term_url.'">'.$term_name.'</a>,';
endif;
};
$print = substr($print, 0, -1);
echo $print;  ?>
この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった  (0)
  • (`・ω・´) 役に立った (1)
  • (・∀・) 参考になった (2)