デフォルトの投稿、もしくはカスタム投稿に設定しているカテゴリの一覧をサイドバーに表示したい。
という要望はよくあると思います。
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にはカスタム投稿のカテゴリに設定したタクソノミーを指定します。
オプションは色々あるので、詳しくはドキュメントを参照してください。