WordPressのカテゴリページに子カテゴリ(サブカテゴリ)一覧を表示する方法

WordPress カテゴリページに子カテゴリの一覧を表示

※当ブログではアフィリエイト広告を利用しています。

ブログのカテゴリが抽象的だったのでより具体的な分け方にしようと思い、子カテゴリや孫カテゴリへの分類を進めました。

これにともなってカテゴリページを開いたときに、子カテゴリの一覧を表示する変更を加えたため、その方法を記載します。

変更後の見た目

カテゴリページを開いている場合、現在選択しているカテゴリの子カテゴリをリストで表示します。
WordPress カテゴリページに子カテゴリの一覧を表示

孫カテゴリがある場合、孫カテゴリも表示されます。

子カテゴリがない場合、何も表示されません。
WordPress カテゴリページに子カテゴリの一覧を表示 子カテゴリがない場合

変更を加える場所

使用しているテーマのcategory.phpに変更を加えます。

category.phpがない場合、archive.phpindex.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_count1にしてカテゴリごとの投稿数を表示していますが、表示しない場合は0にします。

wp_list_categoriesの詳細:テンプレートタグ/wp list categories – WordPress Codex 日本語版

参考にしたサイト:Display Subcategories on Category Pages in WordPress

おわりに

大きなカテゴリに散らばっていた記事を整理し、目的の記事にたどり着くための助けになると幸いです。