どもです。
近頃、首と肩が重い餅。です。
今日も今日とて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; ?>