関数リファレンス/get terms
$cats = get_the_category();
$exclude = array(2);
の代わりにget termsと引数にexclude_treeとか使うんでしょうか。
属しているカテゴリーの親だけでいいんですよね
get_termsの引数にparent=0を追加することで、親カテゴリーだけを指定することができます。
oisit様
digitmaetel様
早速のご返信誠にありがとうございます。
> get_termsの引数にparent=0を追加することで、親カテゴリーだけを指定することができます。
PHP初心者のため的外れなことを言っていましたら申し訳ございません。
自分なりに調べてみたのですが、下記のようなコードとなりますでしょうか。
<?php $categories = get_the_terms( $post->ID, 'category', array(
'parent' => 0,
));
?>
再度こちらで調べてコードを作成しました。
<?php
$taxonomies = 'category';
$args = array(
'exclude_tree' => array(2)
);
$terms = get_terms($taxonomies, $args);
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
foreach ( $terms as $term ) {
echo '<li><a href="' . get_term_link( $term ) .'">' . $term->name .'</a></li>';
}
}
?>
狙い通りカテゴリid=2の親以下は表示されなくなりましたが
それ以外のカテゴリがすべて表示されてしまいます…。
そこで再度ご相談ですが、現在の記事ページのカテゴリのみ
表示するにはどうすればよいでしょうか。
素人で申し訳ございません。
お知恵を拝借できますと幸いです。
あまりレスが付きませんね。get_termsじゃないのでしょうか。
効率化いいのか悪いのかわかりませんが、
get_the_categoryでinclude用のカテゴリー配列を作って、指定してやるあるいはforeachの段階でifでincludeにあるカテゴリーとかするんでしょうか。
孫まで限定なら下記の通りかなぁと思いますが、さらに奥深くまでやるなら再帰呼び出しが必要かなーと思います。
そのあたりはちょっと試している時間がないので割愛。
投稿のカテゴリー IDの 2 とその子と孫カテゴリーを非表示にするには
$exclude = array(2); に子と孫カテゴリーIDを探して追加したらよいということですよね。その部分のみが下記のコードです。
$parent_id = 2;
$exclude = array($parent_id);
$term_children = get_term_children( $parent_id, 'category'); // 親ID 2 の子カテゴリーをチェックし、そのIDを配列に保存
if($term_children){ // もし1つでも小カテゴリーがあれば、、、
array_merge ($exclude, $term_children); // 子カテゴリーIDを $exclude に追記
// 各子カテゴリー内に孫カテゴリーがあるかチェック
foreach ($term_children as $child){
$term = get_term_by ('id', $child, 'category');
if($term){
$exclude[] = $term->term_id; // 孫カテゴリーがあれば、追記
}
}
}
これで $exclude配列に、親ID 2 の子カテゴリーIDと孫カテゴリーIDが入っているはずですよ。
おっと、get_terms を使えば簡単みたいですね。
$parent_id = 2;
$exclude = array($parent_id);
$term_children = get_terms( 'category', array('child_of' => $parent_id) );
if($term_children){
foreach($term_children as $child){
$exclude[] = $child->term_id;
}
}
で奥深いところまで全部探してくれますね。
つまりは、下記のようなコードになるのかなと思います。
<?php
$cats = get_the_category();
$parent_id = 2;
$exclude = array($parent_id);
$term_children = get_terms( 'category', array('child_of' => $parent_id) );
if($term_children){
foreach($term_children as $child){
$exclude[] = $child->term_id;
}
}
foreach((array)$cats as $cat){
if(!in_array($cat->cat_ID, $exclude)){
echo '<a href="' . get_category_link($cat->cat_ID) . '">' . $cat->cat_name . '</a>';
}
} ?>
oisit様
kimipooh様
この度は色々とご指導いただき、誠にありがとうございます。
kimipooh様よりご提示いただきましたコードを埋め込むことで
無事、表示することができました!
<?php
$cats = get_the_category();
$parent_id = 2;
$exclude = array($parent_id);
$term_children = get_terms( 'category', array('child_of' => $parent_id) );
if($term_children){
foreach($term_children as $child){
$exclude[] = $child->term_id;
}
};
foreach((array)$cats as $cat){
if(!in_array($cat->cat_ID, $exclude)){
echo '<li><a href="' . get_category_link($cat->cat_ID) . '">' . $cat->cat_name . '</a></li>';
}
} ?>
長々と初心者にお付き合いいただき、本当に感謝しております。
また何かありましたらご指導いただけますと幸いです。
この度は本当にありがとうございました!