WordPressで投稿のカテゴリを取得し、ウェブページに表示する方法を詳しく解説します。
function get_post_category($anchor = true) {
$category = get_the_category();
if ($category[0]) {
if($anchor) {
echo '<a href="' . get_category_link($category[0]->term_id) . '">' . $category[0]->cat_name . '</a>';
} else {
echo $category[0]->cat_name;
}
}
}
関数パラメータを設定
get_post_category($anchor = true)
$anchor
のパラメータは真偽値を取り、 $anchor = true
のように記述することにより、デフォルト値をtrue
に設定しています。
関数を使用するときに、引数をtrue
またはfalse
と値を変更することによって、カテゴリ名のリンクとして表示するかどうかを変更することができます。
カテゴリの取得
get_the_category()
get_the_category()
関数を使用して現在の投稿に関連付けられたカテゴリのリストを取得します。この関数はカテゴリオブジェクトの配列を取得します。
※参考
get_the_category() – Function | Developer.WordPress.org
※point
各カテゴリオブジェクトには、カテゴリの名前 (cat_name
)、ID (term_id
) などの情報が含まれています。
$category = get_the_category();
$cat_name = $category[0]->cat_name; // カテゴリの名前を取得
$term_id = $category[0]->term_id; // カテゴリのIDを取得
このように指定することにより、オブジェクト内の詳細情報を取得することができます。
カテゴリの存在確認
if ($category[0]) {
この行では、取得したカテゴリの配列が空でないかを確認しています。$category[0]
は配列の最初の要素、つまり最初のカテゴリを指します。最初のカテゴリが存在する場合のみ、次のステップに進みます。
リンクとしての表示
if($anchor) {
echo '<a href="' . get_category_link($category[0]->term_id) . '">' . $category[0]->cat_name . '</a>';
} else {
echo $category[0]->cat_name;
}
$anchor
がtrue
の場合は、
echo '<a href="' . get_category_link($category[0]->term_id) . '">' . $category[0]->cat_name . '</a>';
の行が実行され、カテゴリ名はリンクとして表示されます。
$anchor
がfalse
の場合は、
echo $category[0]->cat_name;
の行が実行され、単にカテゴリ名をテキストとして表示します。
※point①
get_category_link($category[0]->term_id)
$category[0]->term_id
を使って最初のカテゴリのIDを指定しています。
このカテゴリIDをget_category_link()
関数の引数にわたすことで、そのカテゴリIDに対応するカテゴリアーカイブページのURLを生成します。
ちなみに、get_category_link($category[0])
としてカテゴリオブジェクトを直接渡すこともでき、これもカテゴリのIDを指定したことになり、同様にカテゴリアーカイブページのURLを生成します。
※参考
get_category_link() – Function | Developer.WordPress.org
※point②
'<a href="' . get_category_link($category[0]->term_id) . '">' . $category[0]->cat_name . '</a>';
PHPにおいては、「’ ‘」(シングルクォーテーション)や「” “」(ダブルクォーテーション)、「.」(ドット)を使って基本的な文字列を操作します。
「’ ‘」や「” “」で囲う理由
PHPでは、シングルクォーテーション(’ ‘)またはダブルクォーテーション(” “)を使って文字列を定義します。シングルクォーテーションで囲まれた文字列は、その中の内容を完全にリテラル(そのままの文字列)として扱います。つまり、変数の内容やエスケープシーケンス(例えば\n
や\t
など)が展開されることはありません。これに対して、ダブルクォーテーションで囲むと、文字列内に含まれる変数はその値に置き換えられ、エスケープシーケンスも解釈されます。
「.」でつなぐ理由
PHPにおいて、「.」は文字列連結演算子として機能します。この演算子を使用することで、二つ以上の文字列を結合して一つの文字列を作ることができます。
関数の使用例
<div class="entry-label"><?php get_post_category(true) ?></div><!-- /entry-item-tag -->
<div class="entry-item-tag"><?php get_post_category(false) ?></div><!-- /entry-item-tag -->
この様に使用して、リンク付きまたはリンクなしのカテゴリ名を条件に応じて表示することができます。