WordPressを使ってホームページを制作する場合、頻繁に更新するコンテンツにはカスタム投稿タイプ、カスタムタクソノミーを独自に設定し、さらに更新ページにカスタムフィールドをセットすることで負担を軽減できます。
つまり大変便利なんですね。
今回はその応用として、カスタム分類(タクソノミー)のアーカイブページで、現在のターム(項目)に応じた子タームリンク付きリストを表示する方法をまとめます。
具体的に言うと、例えば「食べ物」というカスタムタクソノミーを設定して、「果物」というタームのアーカイブページにはその子タームとして設定した「いちご」「みかん」「りんご」「すいか」などをリンク付きでリスト表示させ、「野菜」というタームのアーカイブページには「人参」「大根」「トマト」などを表示させます。
設定したターム数が少なければ、その数に応じて複数のテンプレートファイルを作ればいいのでしょうが、ターム数が増え、階層も深くなると、そうもいきません。そこで一つのテンプレートファイルで実現できるようにしたいと思います。
では始めます。
「function.php」に次のように記述する。
これはアーカイブページでカスタム分類のターム情報を取得できるようにしています。
01 02 03 04 05 06 07 08 09 10 11 12 | function get_current_term(){ $id ; $tax_slug ; if (is_tax()){ $tax_slug = get_query_var( 'taxonomy' ); $term_slug = get_query_var( 'term' ); $term = get_term_by( "slug" , $term_slug , $tax_slug ); $id = $term ->term_id; } return get_term( $id , $tax_slug ); } |
「wp_list_categories」を使ってリスト表示させる
テンプレートタグ「wp_list_categories」を利用して、アーカイブページでリンク付きタームリストを表示させます。その際、現在のタームに応じて子タームのリストを表示させたいので、パラメータ「child_of」を利用します。
ちなみに「child_of」はこのパラメータで指定したタームIDの子ターム(項目)のみ表示させます。
先ほど「function.php」に追記した記述により、アーカイブページで現在のターム情報が取得できるので、’child_of’ の値に「$term->term_id」をセットします。これで現在のタームに応じた子タームのリンクリストが表示できます。
1 | <?php wp_list_categories( array ( 'taxonomy' => 'grouping' , 'orderby' => order, 'title_li' => false, 'show_count' => true, 'child_of' => $term ->term_id, 'depth' => 1, 'show_option_none' => '' ,)); ?> |
上記の「wp_list_categories」に設定している「child_of」以外のパラメータですが、
「depth」はターム階層のどのレベルまでをリストに出力するかを指定できます。1はどれだけ階層が深くても最上位のタームのみ出力します。
「show_count」は各タームに投稿数を表示するかどうかを指定できます。1が表示、0が非表示です。
「show_option_none」には値がセットされていませんが、こうすることで子タームが存在しない場合に表示される「カテゴリーなし」を非表示にできます。
その他のパラメータについては、こちらを参考にどうぞ。
以上で終わりです。では。