pagetop

COLUMN

2018/01/09

【WordPress】投稿にカテゴリ一覧を表示

CATEGORY:システム

デフォルトの投稿、もしくはカスタム投稿に設定しているカテゴリの一覧をサイドバーに表示したい。
という要望はよくあると思います。

 

 

WordPressなら、難しく考える必要はありません。

 

<?php wp_list_categories(); ?>

 

これをsidebar.phpに記述すれば一発で表示されます。
オプションは色々あるので、詳しくはドキュメントを参照してください。

 

 

「WordPress カテゴリ 一覧」等で検索すると、大体上記のように紹介しているサイトが多いと思います。
それはそれで役に立つのですが、自動生成されたhtmlタグで表示するのはデザインの都合で難しい場合があります。

 

そういった場合は、関数1行で表示されるのは厄介ですので、バラバラにしてみましょう。

 

デフォルト投稿

<?php $categoryList = get_categories(); ?>
<?php if ($categoryList): ?>
 <ul>
  <?php foreach ($categoryList as $value): ?>
   <li>
    <a href="<?= home_url($value->taxonomy . '/' . $value->slug) ?>/"><?=$value->name ?></a>
   </li>
  <?php endforeach; ?>
 </ul>
<?php endif; ?>

 

get_categories関数は、指定された投稿のカテゴリ一覧を取得します。
パラメータが指定されていない場合、取得対象の投稿はデフォルトの投稿(post)になります。

 

カテゴリを配列で取得することで、一つ一つhtmlに記述することが出来るので、複雑なデザインにも対応可能です。

 

そんなことしなくてもcssで対応出来るんだけど・・・。
と思うかもしれませんが、プログラマとhtml作成者が分かれておりcssを勝手に触ったらマズイ、という状況は稀によくあります
こちらの都合に合わせて修正してくれと依頼すると、角が立つ場合もありますし。

 

それを抜きにしても、個人的には上記のやり方のほうが好みです。
自動生成されたhtmlでは想定通りに表示せず、解決するまでに無駄に時間を取られる場合もありますので。

 

コードレビューとかで突っ込まれると面倒ですが。

 

カスタム投稿

<?php
$args = [
  'type' => 'custom',
  'taxonomy' => 'custom_category',
];
$categoryList = get_categories($args);
?>
<?php if ($categoryList): ?>
 <ul>
  <?php foreach ($categoryList as $value): ?>
   <li>
    <a href="<?= home_url($value->taxonomy . '/' . $value->slug) ?>/"><?= $value->name ?></a>
   </li>
  <?php endforeach; ?>
 </ul>
<?php endif; ?>

 

カスタム投稿の場合はパラメータをセットします。
typeには投稿タイプ、taxonomyにはカスタム投稿のカテゴリに設定したタクソノミーを指定します。

 

オプションは色々あるので、詳しくはドキュメントを参照してください。