WordPressのカテゴリーをリンク付きで取得したいと思ったとき、カテゴリーのテンプレートタグが多くて、どれを組み合わせて取得すればいいのか迷うことってありませんか。
WordPressでカテゴリーをどんな形式でサイトに表示したいかでも取得する方法は違いますし、テンプレートを使用するパターンもコレっていうのは決められませんが、今回は調べたことも含めてWordPressでカテゴリーをリンク付きで取得する方法をいくつか説明しようと思います。
the_category()でカテゴリーを取得する
WordPressのカテゴリーを取得するにはthe_category()というテンプレートタグを使用してリンク付きのカテゴリーを取得できます。
ほとんどはWordPressの投稿にカテゴリーを設定して公開してるかと思うのですが、the_category()は投稿に属するカテゴリーを取得して、その属するカテゴリーへのリンクを表示できます。
分かりやすい例だと、トップページの記事一覧(アーカイブ)をループで取得するときにthe_category()をループの中で使用して、記事一覧に表示された投稿ごとに属してるカテゴリーを取得、表示してカテゴリーへのリンクを繋げることができます。
投稿に属したカテゴリーリンクを取得
WordPressのテンプレートタグ「the_category()」で投稿に属したカテゴリーを取得するときの方法は以下のようにして取得します。もちろんリンク付きで。
<?php the_category( ); ?>
パラメータを使用しないthe_category()の場合は、ループする他の投稿のタイトルやサムネイルなどと一緒に、投稿に属してるカテゴリーをthe_category()が取得して表示できます。
このとき投稿に属してるカテゴリーを複数設定している投稿には、設定している件数のカテゴリーが取得されて表示されます。
表示する形式の変更方法
the_category()で取得したWordPressのカテゴリーの表示は、投稿に属しているカテゴリーが複数あるとリスト形式の表示になります。
取得したカテゴリーの表示方法を変更したい場合もあると思いますが、変更するにはthe_category()のパラメータを使用して表示方法の変更ができます。
the_category( $separator, $parents, $post_id )
$separator(文字列)
カテゴリーへのリンクを区切る文字列や記号を表示できます。
たとえば、そうですね.. the_category()のパラメータを( ‘ / ‘ )にしてカテゴリーを取得した場合
<?php the_category( ' / ' ); ?>
投稿が属してるカテゴリーのリンクがスラッシュで区切られた表示形式に変更ができます。区切る文字列や記号はお好みですね。
$parentsは記事が子カテゴリーに属するときの表示方法です。
- (‘multiple’) 親と子のカテゴリーへのリンクは別々の表示で、見た目は「親/子」の表示です。
- (‘single’) 表示は全体で囲んだ「親/子」になり、リンクは子カテゴリーになります。
$post_idはカテゴリーを取得する投稿のIDで表示です。
カテゴリーをthe_category()で取得するパラメータについてはWordPressのcodexでも確認できるので時間があるときにでも確認してみてください。
get_the_category()でカテゴリーを取得する
WordPressのカテゴリーの取得をリンク付きで表示したい方法としては、テンプレートタグのget_the_categoryを使用してもリンクを表示できます。
WordPressのget_the_categoryは、リンクつきのカテゴリーを取得できるというイメージがなかったのですが、リンク付きでカテゴリーを取得する方法としても使用することができました。
カテゴリーを1つリンク付きで取得
WordPressのテンプレートタグ「get_the_category」でリンク付きのカテゴリーの取得をする場合は、投稿が属しているカテゴリーを1つだけ取得するのが良いかと思います。
複数のカテゴリーが属しているときのカテゴリーの取得なら、先述した方法のthe_category()で取得する方が簡単だと思えたからです。
ということで以下がコードです。
<?php
$category = get_the_category();
if ( $category[0] ) {
echo '<a href="' . get_category_link( $category[0]->term_id ) . '">' . $category[0]->cat_name . '</a>';
}
?>
get_the_categoryを$categoryに入れて$category[0]で配列の1番目だけを取得しています。この方法によりWordPressのカテゴリーを投稿に属している1つだけを取得することができます。
ちなみにget_the_category()の関数名に似ているget_categories()という関数もあって、get_categories()とWP_Queryのサブループを組み合わせると、WordPressでカテゴリーごとの一覧をリンク付きで取得して表示できます。別記事にしているので良ければ読んでみてください。
取得したカテゴリーリンクの表示方法
get_the_categoryでリンク付きのカテゴリーを取得した場合にはechoで出力します。そしてechoでリンクタグを記述して、get_the_categoryで取得した内容と共にリンクさせる表示方法です。
<?php
$category = get_the_category();
if ( $category[0] ) {
echo '<a href="' . get_category_link( $category[0]->term_id ) . '">' . $category[0]->cat_name . '</a>';
}
?>
WordPressのgetで始まるテンプレートタグは、値を取ってくるところ(取得)までやってくれますが表示はしてくれないのですね。なので表示方法としてechoで出力して表示する必要があります。
今回、出力しているのは取得したカテゴリーの戻り値からterm_id(カテゴリーid)やcat_name(カテゴリー名)を表示するために出力しています。
WordPressのcodexにget_the_categoryの戻り値の一覧があるので他の戻り値も確認してみてください。
wp_list_categories()でカテゴリーを取得する
WordPressのテンプレートタグで「wp_list_categories()」を使用する方法を使うと、カテゴリーをリンク付きの階層一覧になったリスト形式で取得することができます。
wp_list_categories()は、取得して表示したカテゴリーリンクをクリックすると、テンプレート階層ルールで、適切なカテゴリーテンプレートを用いたカテゴリーページに、そのカテゴリーに属する全ての投稿が表示できるのです。
リンクつき階層一覧リストで取得
WordPressにリンク付きの階層一覧になったカテゴリーリストの取得をするにはテンプレートタグのwp_list_categories()を以下のように記述します。
<?php wp_list_categories(); ?>
難しいコードを記述する必要もなく、一行だけのコードでWordPressにカテゴリーの階層一覧リストを取得、出力してくれます。リンク付きで取得できるのでクリックすると各カテゴリーの一覧にリンクして表示できます。
リストに投稿件数も追加する表示方法
テンプレートタグのwp_list_categories()で取得したカテゴリーリストの一覧は、パラメータを使用して表示方法に項目を追加することができます。
たとえばカテゴリ名の後ろにそのカテゴリに属している記事の件数を出力する場合
<?php wp_list_categories('show_count=1'); ?>
wp_list_categories()のパラメータを(‘show_count=1’)にします。
show_count=1の「1」はtrueで件数表示しています。「0」ならfalseで件数非表示になります。初期値はfalseの0です。
カテゴリーの一覧を取得して表示しているので、カテゴリーに属しているリンク先の投稿件数が表示できることで把握しやすい表示方法です。
wp_list_categories()のパラメータの1例としてリストに投稿件数も追加する表示方法でしたが、投稿件数に加えてパラメータを増やしたい場合は「&」で区切って表示できます。
他にもパラメータで使用できることも多いので、WordPressのcodexを確認してみてください。