-
投稿者投稿
-
2023年6月14日 5:55 PM #126348
【お使いの Snow Monkey のバージョン】20.2.2
【お使いの Snow Monkey Blocks のバージョン】19.6.0
【お使いの Snow Monkey Editor のバージョン】9.2.5
【お使いのブラウザ】Chrome
【当該サイトのURL】### 実現したいこと
最近の投稿でのカテゴリーラベルの表示順を親→子→孫の順番で表示したい。
### 発生している問題
こちらの記事を参考にカテゴリーを複数表示していますが、表示順を親→子→孫にしたいです。
親カテゴリーは一番上にきますが、子と孫の順番が混ざってしまっている状況です。
My Snow Monkeyに書き込む形で解決できればと思っていますが可能でしょうか?
♥ 0いいねをした人: 居ません2023年6月16日 11:51 AM #126435なんか汎用的なコードを書くの難しそうな気がしますね…僕の実力的に。ちょっと下記教えてください。
– 記事のカテゴリーへのチェックは、親、子、孫、全部にチェックを付けていますか?それとも孫だけですか?
– 全ての記事が親、子、孫に属していますか? それとも親だけの記事や親、子までの記事もあったりしますか?♥ 0いいねをした人: 居ません2023年6月16日 4:06 PM #126513ありがとうございます。
– 記事のカテゴリーへのチェックは、親、子、孫、全部にチェックを付けていますか?それとも孫だけですか?
→親、子、孫、全部にチェックをつけています。
– 全ての記事が親、子、孫に属していますか? それとも親だけの記事や親、子までの記事もあったりしますか?
→親だけ、親、子までの記事もあります。
♥ 0いいねをした人: 居ません2023年6月19日 9:08 AM #126599なるほどです。
もしチェックしているカテゴリーが末端のカテゴリーにだけ(例:親・子・孫チェックではなく孫のみチェック、親・子チェックではなく子のみチェック)なら
get_ancestors()
で先祖のカテゴリーも一括取得できるのでなんとかできそな気がします。全部にチェックする方式ではなくて末端のカテゴリーにだけチェックする運用に変えることって可能でしょうか?
♥ 0いいねをした人: 居ません2023年6月19日 9:12 AM #1266002023年6月19日 10:44 AM #126619末端カテゴリーのみにチェックを変える事も可能です。
末端カテゴリーのみにチェックした場合の想定でコードを書いてみました。
add_filter( 'snow_monkey_get_template_part_args', function( $args ) { // 記事一覧カテゴリー以外のテンプレートの場合は無視 if ( 'template-parts/loop/entry-summary/term/term' !== $args['slug'] ) { return $args; } // 投稿以外の場合は無視 if ( 'post' !== $args['name'] ) { return $args; } $terms = get_the_terms( get_the_ID(), 'category' ); if ( $terms ) { // チェックしたカテゴリーを元にその先祖カテゴリーを取得 $term = $terms[0]; $term_ids = get_ancestors( $term->term_id, 'category', 'taxonomy' ); // チェックしたカテゴリーと先祖のカテゴリー情報をカテゴリーラベルとして使用 $new_terms = array(); foreach ( $term_ids as $term_id ) { $new_terms[] = get_term( $term_id, 'category' ); } krsort( $new_terms ); $new_terms[] = $term; $args['vars']['_terms'] = $new_terms; } return $args; } );
2023年6月19日 11:23 AM #126622ありがとうございます。
こちらコードで親、子、孫の順にカテゴリーラベルの表示ができました!
ただ、下記のようなに、孫カテゴリーの複数にチェックを入れた場合、孫が一つしか表示されません。
日本(親)
→ 東京(子)
→ ✅新宿区(孫)、✅渋谷区(孫)、✅目黒区(孫)
ラベルの表示は日本 東京 新宿
親カテゴリ、子カテゴリ、孫カテゴリ(チェックがある場合複数表示)で表示することは可能でしょうか?
♥ 0いいねをした人: 居ません2023年6月19日 1:02 PM #126624こんな感じでどうですかね?
add_filter( 'snow_monkey_get_template_part_args', function( $args ) { // 記事一覧カテゴリー以外のテンプレートの場合は無視 if ( 'template-parts/loop/entry-summary/term/term' !== $args['slug'] ) { return $args; } // 投稿以外の場合は無視 if ( 'post' !== $args['name'] ) { return $args; } $new_terms = array(); $terms = get_the_terms( get_the_ID(), 'category' ); foreach ( $terms as $term ) { $term_ids = get_ancestors( $term->term_id, 'category', 'taxonomy' ); krsort( $term_ids ); // チェックしたカテゴリーと先祖のカテゴリー情報をカテゴリーラベルとして使用 foreach ( $term_ids as $term_id ) { $new_terms[ $term_id ] = get_term( $term_id, 'category' ); } $new_terms[ $term->term_id ] = $term; } $args['vars']['_terms'] = $new_terms; return $args; } );
2023年6月19日 2:03 PM #1266292023年6月19日 2:05 PM #126631 -
投稿者投稿
- トピック「最近の投稿でのカテゴリーラベルの表示順について」には新しい返信をつけることはできません。