関数 get_categories() のパラメータ child_of を使って子孫カテゴリー(または parent を使って子だけ)を取得できます。
言葉足らずでしたので追記します。
親カテゴリー、子カテゴリー(孫カテゴリー)それぞれから get_objects_in_term() で投稿 ID の配列を取得した後、それを PHP の array_merge() でひとまとめにしてから(重複排除が必要なら array_unique() にも通してから)、wp_get_object_terms() へ渡せば良いかなと思います。
-
この返信は8年、 1ヶ月前にgblsmが編集しました。
ご返信ありがとうございます!
動きのイメージはできるのですが、
力不足でどのようにソースに落とせばいいのか分からずにいます。。
今回の場合はどのように書けば良いでしょうか。。稚拙で申し訳ありません。
先に謝る必要はありませんよ。コードを書くのに挑戦しませんか。最初のコードは自作なのですよね。
コメントさせていただいた中に説明ページのリンクを貼ってありますから、そのページにある用例を参考にしてコードを書いてみてはどうですか。それでわからないところを相談していただければと思います。
ありがとうございます。
ここで相談させていただくまで以下のような形で挑戦していたのですが、
上手くうごかず、やむなく親カテのタグのみにしておりました。
<?php
$cat_id = get_queried_object()->cat_ID;
// 表示中のカテゴリーに属する投稿のIDを配列で取得
$parent_posts = get_objects_in_term( $cat_id, 'category' );
// 表示中のカテゴリー>子カテゴリのIDを取得
$args = array( 'child_of' => $cat_id,);
$categories = get_categories( $args );
// 表示中のカテゴリー>子カテゴリに属する投稿のIDを配列で取得
foreach( $categories as $val){
$children_posts = get_objects_in_term( $val->term_id, 'category' );
}
// 結合
$current_posts = array_merge($parent_posts, $children_posts);
// 表示中のカテゴリーに属する投稿に付けられたタグの情報をまとめて取得
$current_tags = wp_get_object_terms( $current_posts, 'post_tag' );
if ( is_category() and $current_tags ) {
foreach( $current_tags as $tag ){
echo '<li><a href="' . $new_uri = add_query_arg( 'tag', $tag -> slug, '/' ) . '">' . $tag -> name . '</a></li>' . "\n";
}
}
?>
「表示中のカテゴリー>子カテゴリに属する投稿のIDを配列で取得」の部分がおかしい?ような気がするのですが、ご指南いただけますでしょうか。
※この状態だと子カテゴリの記事に属するタグ一覧のみで、親カテのみに属する記事のタグが出ておりません。。
そのコードで「親カテゴリーのみに属する記事のタグが出ない」とは思えませんね。
(親カテゴリーの記事のタグは出るけれど、子孫カテゴリーの記事のタグが少ししか出ない、と思われます。)
コードをちょっと変えて検証してみたところ、これで必要なタグが表示できました。
$cat_id = get_queried_object()->cat_ID;
// 表示中のカテゴリーに属する投稿のIDを配列で取得
$current_posts = get_objects_in_term( $cat_id, 'category' );
// 表示中のカテゴリー>子カテゴリのIDを取得
$args = array(
'child_of' => $cat_id,
);
$categories = get_categories( $args );
// 表示中のカテゴリー>子カテゴリに属する投稿のIDを配列で取得
foreach ( $categories as $val ) {
$more_posts = get_objects_in_term( $val->term_id, 'category' );
// 結合
$current_posts = array_merge( $current_posts, $more_posts );
}
// 表示中のカテゴリーに属する投稿に付けられたタグの情報をまとめて取得
$current_tags = wp_get_object_terms( $current_posts, 'post_tag' );
// category.php に書くなら if ( $current_tags ) { だけで大丈夫。
if ( is_category() and $current_tags ) {
foreach ( $current_tags as $tag ) {
$new_uri = add_query_arg( 'tag', $tag->slug, home_url( '/' ) );
echo '<li><a href="' . $new_uri . '">' . $tag->name . '</a></li>' . "\n";
}
}
-
この返信は8年、 1ヶ月前にgblsmが編集しました。
ありがとうございます!
いただいたコードで意図する表示ができました!
なるほど結合もループ内で行うべきだったのですね。
大変勉強になりました。
本当にありがとうございました!