[WordPress] カスタム分類のアーカイブページで、現タームの子タームのみのリンク付きリストを表示する方法

Sponsored Link

wordpress1

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」には値がセットされていませんが、こうすることで子タームが存在しない場合に表示される「カテゴリーなし」を非表示にできます。

その他のパラメータについては、こちらを参考にどうぞ。

以上で終わりです。では。

関連記事

福岡のウェブデザイン事務所「ハブワークス」

HP作成・リニューアルは福岡のハブワークスまでお気軽にお問い合わせください。ウェブサイト公開後の修正・更新もお任せください。フリーランスだからできるリーズナブルな料金設定でサービスをご提供いたします。