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

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

railsのaws-sdk gemを使ってs3のファイルを削除する

by martinak15 概要 みなさんこんにちはcandleです。今回はs3にアップロードされている画像ファイルをrailsのaws-sdk gemを使用して削除してみたいと思います。 記事中で開 …

ruby on railsのckeditor gemの使い方をscaffoldを用いて解説する

概要 みなさんこんにちはcandleです。今回はruby on railsのckeditorという素晴らしいgemを使って見たいと思います。 ckeditorとはweb版の高機能なwordとかテキスト …

railsのscaffoldでremote formで送信後jsonを取得する

概要 みなさんこんにちはcandleです。 今回はrailsのformをremoteを使ってajaxした時に、 サーバに送った値をjavascript側で受け取る方法を紹介します。 ちなみに、私は下の …

Mysqlテーブルの照合順序を変更する

概要 みなさんこんにちはcandleです。今回はテーブルの照合順序を変更する方法を行います。 この方法はやっても、mysqlクエリー1行ですみます。早速やりましょう。 テーブルの照合順序を変更する 次 …

cakephp2.5.6をfabric+cuisineを使用してインストールする

概要 みなさんこんにちはcandleです。今回はcakephp2.5.6の環境構築をfabricを使用して、インストールしてみましょう。cakephpはrailsと比べると100倍くらい簡単に環境構築 …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ