WordPressを使ってホームページを制作する場合、頻繁に更新するコンテンツにはカスタム投稿タイプ、カスタムタクソノミーを独自に設定し、さらに更新ページにカスタムフィールドをセットすることで負担を軽減できます。
つまり大変便利なんですね。
今回はその応用として、カスタム分類(タクソノミー)のアーカイブページで、現在のターム(項目)に応じた子タームリンク付きリストを表示する方法をまとめます。
具体的に言うと、例えば「食べ物」というカスタムタクソノミーを設定して、「果物」というタームのアーカイブページにはその子タームとして設定した「いちご」「みかん」「りんご」「すいか」などをリンク付きでリスト表示させ、「野菜」というタームのアーカイブページには「人参」「大根」「トマト」などを表示させます。
設定したターム数が少なければ、その数に応じて複数のテンプレートファイルを作ればいいのでしょうが、ターム数が増え、階層も深くなると、そうもいきません。そこで一つのテンプレートファイルで実現できるようにしたいと思います。
では始めます。
「function.php」に次のように記述する。
これはアーカイブページでカスタム分類のターム情報を取得できるようにしています。
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」をセットします。これで現在のタームに応じた子タームのリンクリストが表示できます。
<?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」には値がセットされていませんが、こうすることで子タームが存在しない場合に表示される「カテゴリーなし」を非表示にできます。
その他のパラメータについては、こちらを参考にどうぞ。
以上で終わりです。では。