概要
みなさんこんにちはcandleです。今回はwordpress開発でよくあるサブカテゴリーを全て取得する方法を紹介します。
カテゴリー一覧をサイドバーに表示したい時があります。この時、get_categoriesで取得すると全て表示してしまいます。例えば、親カテゴリーが「大学」で子カテゴリーの「慶応大学」「早稲田大学」を表示したい場合があります。これをやってみましょう。
前提
適当なwordpressの自作テーマがある
wordpressの動く環境がある
サブカテゴリーを登録する
例えば、以下のようなカテゴリーがあったとしましょう。
この「大学」にサブカテゴリーを登録します。
新規カテゴリーを追加で、「名前」に「慶応大学」、「スラッグ」に「keio」、「親」を「大学」にします。
同様に、名前を「早稲田大学」、スラッグを「waseda」、親を「大学」で登録します。
サブカテゴリー一覧を表示する
テンプレートに移動して、試しにホームの横のサイドバーに表示します。
私の場合ですと、下の画像の部分になります 。
それではテーマの中に以下のファイルを作成します。
wp-content/themes/テーマ名/sidebar-subcategory.php
私の場合はこうです。
wp-content/themes/mydesign/sidebar-subcategory.php
作成したファイルに以下を記述します。
<h3>SubCategories</h3> <ul class="list-reset"> <?php $parent_category = get_category_by_slug("university"); $args = array( 'type' => 'post', 'child_of' => $parent_category->term_id, 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => FALSE, 'hierarchical' => 1, 'taxonomy' => 'category', ); $child_categories = get_categories($args ); foreach( $child_categories as $category ): ?> <li> <a href="<?php echo get_category_link( $category->term_id ); ?>"> <?php echo $category->cat_name; ?> </a> </li> <?php endforeach; ?> </ul>
保存しましょう。
続いて、index.phpを開いて、サブカテゴリーを表示したい、場所に以下を追加します。
<?php get_sidebar("subcategory"); ?>
私はこの部分になりました。
get_category_by_slugでスラッグからuniversityカテゴリーのオブジェクトを取得し、
その$parent_category->term_idを使って$argsの中のchild_ofでidを投げます。
get_categoriesで$argsを与えて、親idに紐づく子カテゴリーを全て取得します。
あとはforeachで回して、表示するだけです。
まとめ
wordpressで開発を行っていると、サブカテゴリーでまとめるほうが良いのかカスタムフィールドのほうが良いのか迷う時がありますが、ケースバイケースで適応しましょう。