※当ブログではアフィリエイト広告を利用しています。
ブログのカテゴリが抽象的だったのでより具体的な分け方にしようと思い、子カテゴリや孫カテゴリへの分類を進めました。
これにともなってカテゴリページを開いたときに、子カテゴリの一覧を表示する変更を加えたため、その方法を記載します。
変更後の見た目
カテゴリページを開いている場合、現在選択しているカテゴリの子カテゴリをリストで表示します。
孫カテゴリがある場合、孫カテゴリも表示されます。
子カテゴリがない場合、何も表示されません。
変更を加える場所
使用しているテーマのcategory.php
に変更を加えます。
category.php
がない場合、archive.php
やindex.php
に変更を加えます。
これはテンプレート階層のファイルを探す優先順位が下記のようになっているためです。
1. カテゴリーID が 4 なら、WordPress はテンプレートファイル category-4.php を探します。
2. 見つからなければ、次に WordPress は一般的なカテゴリーテンプレートファイル category.php を探します。
3. このファイルもなければ、WordPress は一般的なアーカイブテンプレートファイル archive.php を探します。
4. これもなければ、WordPress はメインテーマテンプレートファイル index.php を使用します。
変更を加える内容
子カテゴリ一覧を表示したい場所に下記のコードを貼り付けます。
<?php if (is_category() && !is_paged()) { $thisCat = get_category($cat); $args = array( 'child_of' => $thisCat->cat_ID ); $catChildren = get_categories($args); if ($catChildren) { $subCategoriesList = wp_list_categories('orderby=id&show_count=1&title_li=&use_desc_for_title=1&child_of='.$thisCat->cat_ID."&echo=0"); ?> <h2>「<?php echo $thisCat->name; ?>」のサブカテゴリ</h2> <ul class="category-page-category-list"> <?php echo $subCategoriesList; ?> </ul> <?php }} ?>
カテゴリーページの1ページ目の場合のみ動作します。
流れとしてはまずget_category($cat)
で現在のカテゴリ情報を取得します。
その後、get_categories()
関数の引数にchild_of
でカテゴリIDを指定し、子カテゴリの有無を調べています。
子カテゴリが存在する場合、wp_list_categories
関数を使ってリンク付きのカテゴリーリストを表示しています。
show_count
を1
にしてカテゴリごとの投稿数を表示していますが、表示しない場合は0
にします。
wp_list_categoriesの詳細:テンプレートタグ/wp list categories – WordPress Codex 日本語版
参考にしたサイト:Display Subcategories on Category Pages in WordPress
おわりに
大きなカテゴリに散らばっていた記事を整理し、目的の記事にたどり着くための助けになると幸いです。