joppot

コピペで絶対動く。説明を妥協しない

wordpressで任意のサブカテゴリー全てをget_categoriesで取得する

   

Pocket

thumb

概要

みなさんこんにちはcandleです。今回はwordpress開発でよくあるサブカテゴリーを全て取得する方法を紹介します。
カテゴリー一覧をサイドバーに表示したい時があります。この時、get_categoriesで取得すると全て表示してしまいます。例えば、親カテゴリーが「大学」で子カテゴリーの「慶応大学」「早稲田大学」を表示したい場合があります。これをやってみましょう。

前提

適当なwordpressの自作テーマがある
wordpressの動く環境がある

サブカテゴリーを登録する

例えば、以下のようなカテゴリーがあったとしましょう。

alice_categories-1

この「大学」にサブカテゴリーを登録します。
新規カテゴリーを追加で、「名前」に「慶応大学」、「スラッグ」に「keio」、「親」を「大学」にします。

add_new_cate
同様に、名前を「早稲田大学」、スラッグを「waseda」、親を「大学」で登録します。

new_uni_category
これでサブカテゴリーの登録は完了しました。

サブカテゴリー一覧を表示する

テンプレートに移動して、試しにホームの横のサイドバーに表示します。
私の場合ですと、下の画像の部分になります 。

viausl

それではテーマの中に以下のファイルを作成します。
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"); ?>

私はこの部分になりました。

show_subcategory-1
これで表示すると、以下のようになります。

top_sub_category
プログラムの解説をします。

get_category_by_slugでスラッグからuniversityカテゴリーのオブジェクトを取得し、
その$parent_category->term_idを使って$argsの中のchild_ofでidを投げます。
get_categoriesで$argsを与えて、親idに紐づく子カテゴリーを全て取得します。
あとはforeachで回して、表示するだけです。

まとめ

wordpressで開発を行っていると、サブカテゴリーでまとめるほうが良いのかカスタムフィールドのほうが良いのか迷う時がありますが、ケースバイケースで適応しましょう。

 - プログラミング ,