個々の投稿はカテゴリーにいれることが多いですが、the_category
という関数(テンプレートタグ)を使って、個々の投稿にその投稿が分類されるカテゴリーの一覧を出力することができます。
カテゴリーの出力
カテゴリーの情報を出力するには、the_category
の関数を使います。
<?php the_category(); ?>
パラメータなしで the_category()
と呼び出した場合、カテゴリーの一覧はリスト ul/li
で出力されます。
<ul class="post-categories">
<li><a href="カテゴリーのURL" rel="category">〇〇</a></li>
<li><a href="カテゴリーのURL" rel="category">××</a></li>
<li><a href="カテゴリーのURL" rel="category">△△</a></li>
</ul>
セパレータを指定して出力
the_category
のパラメータとして、個々のカテゴリーを区切る文字(セパレータ)を指定することが可能です。
<?php the_category( ' / ' ); ?>
この場合、カテゴリーへの一覧は ul/li
で囲まれず、ここのカテゴリーへのリンクの間にセパレータの文字列が出力されます。
リンクなしのカテゴリー名を出力
リンク無しでカテゴリー名を出力する場合には、以下の関数を使ってカテゴリー名を出力します。
<?php $cat = get_the_category(); $cat = $cat[0]; { echo $cat->cat_name; } ?>
件数付きの全カテゴリーの出力
サイドバーや任意の場所にサイトの全カテゴリーを表示させるには、wp_list_categories()
という関数(テンプレートタグ)を使います。
デフォルトでは <li>
タグで出力されるので、以下のように記述します。
<ul>
<?php wp_list_categories(); ?>
</ul>
カテゴリーがリストとしてマークアップされますが、何もパラメータを指定しないと、「カテゴリー」というタイトルが表示され、そのあとにカテゴリー名が表示されてしまうので、title_li
というパラメータを使い非表示にします。
それに、記事の投稿件数を表示させるには show-count
というパラメータを使い表示させることができ、この title_li
とshow-count
の関数を組み合わせて出力します。
<ul>
<?php
$args = array(
'show_count' => 1,
'title_li' => ''
);
wp_list_categories($args);
?>
</ul>
親子階層のカテゴリーを件数付きで出力
親子階層のカテゴリーを、一覧で li
で主力させるには下記のように記述します。
表示順は管理画面の並び順で出力し、親と子がそれぞれ別に出力されるので、親の階層だけリンクなしで記述したりと、カスタマイズがしやすい記述です。
<ul>
<?php
$args = array(
'orderby' => 'menu_order',
'parent' => 0,
);
$categories = get_categories($args);
?>
<?php foreach( $categories as $category ) :?>
<li class="catparent">
<a href="<?php echo get_category_link( $category->term_id ) ;?>">
<?php echo $category->name ;?>(<?php echo $category->count;?>)
</a>
</li>
<?php
$childcatnum = count(get_term_children($category->cat_ID,'category'));
?>
<?php if($childcatnum > 0) :?>
<?php
$catchildargs = array('parent'=>$category->cat_ID);
$catchilds = get_categories($catchildargs);?>
<?php
foreach($catchilds as $catchild):?>
<?php $cat_link = get_category_link($catchild ->cat_ID);?>
<li>
<a href="<?php echo $cat_link ;?>">
<?php echo $catchild->name ;?>(<?php echo $catchild->count;?>)
</a>
</li>
<?php endforeach ;?>
<?php endif ;?>
<?php endforeach ;?>
</ul>