2018年08月01日
Docker for Mac を使って WordPress の...
2018年07月29日
Docker for Mac のインストール
2018年07月08日
Docker 便利コマンドあれこれ
2018年07月08日
オライリーの Docker 本(Docker Up &...
2018年07月05日
iPad mini 2 を購入しました
2018年07月04日
Docker で Jenkins するときのあれこれ

HOME > カテゴリ(WordPress)の記事

wp_list_categories() を使わずに get_terms() でカテゴリ一覧を表示する



WordPress でカテゴリ一覧を取得する場合は、wp_list_categories() を用いることが多いようですが、wp_list_categories() は余計な <li> タグなどを一緒に生成するのでイマイチ使い勝手が悪い。

wp_list_categories() を使わずにカテゴリ名などを取得する場合は、get_terms() を使って直接 DB からデータを取得するらしい。

参考URL:WordPressで全てのカテゴリー構造を取得する方法 | とりさんのソフト屋さん

上記、参考URL で紹介されている自作の関数を、ちょこっとだけ修正して利用させてもらうことにしてみる。

修正個所は、get_terms() の引数の &orderby=id を削除しただけ。理由は、私のブログでは Category Order というプラグインでカテゴリの順序を並べ替えていますが、get_terms() するときに orderby を指定してしまうと Category Order の設定が有効にならないためです。

うまく並ばずちょっと悩みましたが Category Order の Readme にちゃんと書いてありました・・

修正後の関数はこんな感じ。


  function get_all_category_all() {
    if ( ! $cat_all = wp_cache_get( 'all_category_all', 'category' ) ) {
      $cat_all = get_terms( 'category', 'fields=all&get=all' );
      wp_cache_add( 'all_category_all', $cat_all, 'category' );
    }
    return $cat_all;
  }
?>

っで、wp_list_categories() でカテゴリ一覧を出力している部分を、


  $terms = get_all_category_all();
  foreach ($terms as $term) { ?>
      <li><a href="<?= get_category_link($term->term_id); ?>">
        <?= $term->name; ?>
      </a></li>

に変更します。foreach() の中で、$term から個々のカテゴリ情報にアクセスできますので、カテゴリ名なり、カテゴリID なり必要な情報を取得して、条件分岐するなりすれば、カテゴリ表示が柔軟になります。

$term でアクセスできる情報は以下のとおり。

  • term_id → ID
  • name → カテゴリ名
  • slug → スラグ
  • term_group → タームグループ
  • term_taxonomy_id → タクソノミID
  • taxonomy → タクソノミ 名
  • description → 説明
  • parent → 親カテゴリ
  • count → 記事数

参考URL:Function Reference/get terms | WordPress.org codex

(タームグループってなんだろ?)

カテゴリアーカイブへの URL は $term からは取得できず、get_category_link() を使うようで、引数は カテゴリ ID のみなので、

get_category_link($term->term_id);

こんな感じで URL が取得できます。

参考URL:関数リファレンス/get category link | WordPress Codex 日本語版

このブログでは、ページ上部のカテゴリ一覧、


をこのエントリの方法で表示しています。サイドバーのカテゴリ一覧はデフォルトのウィジェット。

でわでわ。

<追記:2011/06/08>

カテゴリ一覧を取得するだけなら、get_terms() じゃなくて get_categories() を使った方がよさげ

参照:WordPress でカテゴリ一覧を取得する場合は get_terms() じゃなくて get_categories() を使うべし





「wp_list_categories() を使わずに get_terms() でカテゴリ一覧を表示する」に頂いたコメント

  1. […] wp_list_categories() を使わずに get_terms() でカテゴリ一覧を表示する | MacBook Air … […]

この記事にコメントする





Copyright © 2012 - 2013 MacBook Air とWordPressでこうなった All rights reserved
Designed by Theme Junkie. Powered by WordPress.