WordPressテーマのSWELLにおいて、投稿リストブロックにカテゴリー名を表示する方法をご紹介しています。
お客様から、カスタムタクソノミーのターム名を表示したいという要望があり、なんとか実現できたのでメモ書きです。
SWELLの投稿リストにタクソノミーターム名を表示した例
やりたいことはこちら↓
画像では分かりにくいかもですが、カスタム投稿の投稿リストの右上に、タクソノミーのターム名(カテゴリー名)を表示しています。赤枠で囲っているところです。
最初から用意されているコア投稿であれば、投稿リストブロックの中の「カテゴリー表示位置」を選択することで、その投稿に紐づくカテゴリー名を表示することができます。
しかし残念ながらカスタム投稿の場合、「カテゴリー表示位置」を選択しても、投稿リスト上にターム名は表示されません。
カスタム投稿の投稿リストにターム名を表示するには、コードのカスタマイズ(functions.phpの編集)が必要です。
functions.phpを編集する方法
functions.phpを編集するには外観>テーマファイルエディターを開きます。
初めて開く際には警告文が表示されますが、「理解しました」をクリックしてください。
「編集をするテーマを選択」がSWELL CHILDとなっていることを確認し、「テーマのための関数」を開きます。このファイルがfunctions.phpです。
コードを追加するには、既に書かれているコードの下に記述すればOKです。
WordPressのプラグインであるCode Snippetsを使用していただいても問題ありません。
コードの完成形
さっそくですが完成したコードがこちらです。子テーマのfunctions.php
に追加してください。
function swl_parts__post_list_category($args)
{
$the_id = $args['post_id'] ?? get_the_ID();
$cat_data = get_the_category($the_id);
$genre_data = get_the_terms($the_id, 'food-genre'); // 「food-genre」に独自に設定したタクソノミースラッグを入れる
if (!empty($cat_data)) { // カテゴリーのラベル表示用
echo '<span class="c-postThumb__cat icon-folder" data-cat-id="' . $cat_data[0]->slug . '">' . $cat_data[0]->name . '</span>';
if (empty($cat_data)) {
return;
}
}
if (!empty($genre_data)) { // タームのラベル表示用
echo '<span class="c-postThumb__cat icon-folder" data-cat-id="' . $genre_data[0]->slug . '">' . $genre_data[0]->name . '</span>';
if (empty($genre_data)) {
return;
}
}
}
【カスタムタクソノミーの情報】
- タクソノミー名:食のジャンル
- タクソノミースラッグ:food-genre
- タクソノミーターム名:和食、イタリアン、フレンチ、中華など
カスタムタクソノミーをCPT UIで設定している場合は、タクソノミーの追加と編集>タクソノミーを編集タブをクリックすることで確認できます。
解説
関数の出力を書き換え
記事リストのカテゴリーを出力するswl_parts__post_list_category
という関数が、SWELLのlist_parts.phpにおいて元々定義されています。
今回はこの関数をfunctions.phpの中で定義して出力を書き換えています。
変数にタームの情報を格納
$genre_data = get_the_terms( $the_id, 'food-genre');
WordPressで用意されているget_the_terms()
関数を使用することにより、その投稿に属するカスタムタクソノミーのターム情報を、$genre_data
として変数に格納しています。
タームの情報から必要な文字列を出力
if (!empty($genre_data)) { // タームのラベル表示用
echo '<span class="c-postThumb__cat icon-folder" data-cat-id="' . $genre_data[0]->slug . '">' . $genre_data[0]->name . '</span>';
if (empty($genre_data)) {
return;
}
}
$genre_data
が空でなければ、一つ目のタクソノミーターム名を表示させています。$genre_data
が空であれば何もせずに返しています。
他のカスタム投稿でもタクソノミーターム名を投稿リストに表示したい場合は、「タームのラベル表示用」のif文を追加したいタクソノミーの分だけ書いていただければ表示されます。
その際は$genre_data
等の変数の定義も忘れないようにしてください。
関数の出力を書き換えているため、「カテゴリーのラベル表示用」のif文も書いておく必要があります。こちらを書いておかないと、コア投稿のカテゴリーラベルが投稿リストに表示されなくなってしまいます。
こちらのフォーラムの回答を参考に実現することができました。
コーポレートサイトのトップページなどでは、カスタム投稿の投稿リストにターム名を表示することは一般的かと思います。
いずれはコードによるカスタマイズではなくSWELLの機能として、タクソノミーターム名をリストに表示できればいいなと思いました。
どなたかのお役に立てれば幸いです!