当サイトの設計図(タームやタクソノミーの出力方法)
今回は本サイトで使用しているタクソノミーやタームの出力方法を備忘録として残しておきます
まずタームやタクソノミーに関して、
通常のWordPressの投稿機能でカテゴリーと呼ばれる「分類」やタグと呼ばれる「分類」がいわゆるタクソノミーであり、
その詳細な内容、
料理のカテゴリーであれば「洋食」、「和食」、「中華」などがタームと呼ばれる分類に当たります
本サイトはこのタクソノミーやタームをカスタムして増やしており、
これに関して呼び名はそれぞれですが、
「カスタム投稿タイプのカテゴリーやタグなど」と言ったりします
前置きが長くなりましたが本サイトのタクソノミーやタームの出力方法を見ていきます
リンク無しタクソノミーの名前を出力(タクソノミーページ)
$taxonomy_var = get_taxonomy('oja_cat'); ?>
<div id="taxonomy-text"><?php echo $taxonomy_var->label; ?></div>
get_taxonomy()
関数の解説です
get_taxonomy()はタクソノミースラッグを文字列で指定しそのオブジェクトを取得しています
そして名前はそのオブジェクトのラベルに入っているため、
$taxonomy_var->labelでアクセス出来ます。
オブジェクトにはいろいろな情報が入っているため気になったらPHP関数の
print_r(’オブジェクト’)で調べて見ましょう
リンク無しターム名を出力(タクソノミーページ)
$oja_slug = get_query_var('oja_cat');
$oja_cat = get_term_by('slug',$oja_slug,'oja_cat');
<h3 class="text-frame">「<?php echo $oja_cat->name; ?>」の記事</h3>
get_term_by()
メインで使用するのは上記の関数です。この関数は、
get_term_by(‘条件’,マッチする値,’タクソノミー’)と引数を指定することでタームのオブジェクトを取得できます
get_query_var()
get_query_var(キーワード)はキーワードに紐づく現在のクエリからの情報を返してくれます、
ここではタクソノミーを指定して現在のクエリのスラッグを取得しているため、
「<?php echo $oja_cat->name; ?>」の記事の見出しの部分はアクセスがあったタームの名前に動的に変更することが可能です。
リンク無しターム名を出力(ループ中)
<?php if ($terms = get_the_terms($post->ID,'production')) :
echo ('<h2>');
echo esc_html($terms[0]->name);
echo ('</h2>');
endif; ?>
get_the_terms(ID,’taxonomy’)
get_the_termsは投稿IDとタクソノミーを引数に全てのタームオブジェクトを取得できる便利な関数です
投稿IDは$post->IDとすれば現在のクエリのIDが取れます
この場合ループ中であったため、$terms[0]とすることで最初に登録されているターム名のみを表示するようにしています。
投稿に割り当てられたタームを取得してくるため、
用途の違いで投稿に関係なくタームオブジェクトを取得したい場合は
get_term()を使用します
すべてのタームをリンク付きで出力(全ページ)
wp_list_categories(配列)
<ul class="tag_list">
<?php $args = [
'title_li' => '',//見出しの文字は無し
'show_count' => false,//投稿数を表示するかどうか
'depth' => true,//HTMLをliのみで階層なしの場合はfalse
'hide_empty' => true,//投稿記事がないカテゴリーを表示する場合はfalse
'number' => '',//表示件数
'taxonomy' => 'oja_tags'//categoryはデフォルト。カスタムOK
];
wp_list_categories($args); ?>
</ul>
wp_list_categories(配列)の関数は引数に配列を渡しタームのリストをリンク付きで表示してくれる便利な関数です
引数の配列を工夫することで様々なカスタムが可能です
まずはパラメータの解説です、
‘title_li’ => ”こちらはリストの先頭にタイトルとしてのlitタグを出力してくれます、今回は空文字列を入れて出力しないようにしています。
普通にタグやテキストなどを入れることが出来ます以下は例文です
'title_li=<h2>'.__('見出しだよ').'</h2>')
この場合だと<h2>タグで表示してテキストを「見出しだよ」に変更しています
‘show_count’ => false,はタームに紐づく記事数を表示します
(5)のように括弧付きで表示されます
‘depth’ => trueでページの改装を指定できます
デフォルトは「0」ですべてのカテゴリーとなっており「1」を指定することで最上位の親ページのみを表示となります
‘taxonomy’ => ‘oja_tags’にてカスタムタクソノミーoja_tagsを指定しています
デフォルトは通常のカテゴリーであるがカスタム投稿タイプでも大丈夫です
タームリストをオプションにしてさらに画面遷移させる
<?php
$categories = get_categories(array('taxonomy' => 'oja_cat'));
if (!empty($categories)) :?>
<select name="dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
<option value="" selected="selected">カテゴリーを選択</option>
<?php foreach ( $categories as $category ): ?>
<option value="<?php echo esc_url( get_category_link( $category->term_id ) ); ?>"><?php echo esc_html( $category->name ); ?></option>
<?php endforeach; endif; ?>
get_categories()関数は問い合わせパラメータにマッチするカテゴリーのオブジェクトを配列として返します。
問い合わせパラメータの内容は wp_list_categories とほぼ同じで、クエリ文字列形式でも配列形式でも渡すことができます。
そして取得した配列をforeachのループで回すことで、
echo esc_html( $category->name )としてoptionの中身として渡しています
さらにget_category_link(ID)は中の引数にタームのIDを指定してリンクの値をPHPとして返す関数です
IDはget cat ID()などで取得してくるのですが、
ここでもタームのオブジェクトをforeachループ中のため、
$category->term_idで出力できます
それをPHPの関数esc_url()でHTMLのURLとしてのvalue値に渡すことでリンクを生成しています
少しJSの解説もします
変化が起きた時に関数を実行する(onchange)
onchange=属性はJSで、もしくわHTML上でコールバック関数を受け取るようなイメージで今回は直接HTML上にJSの関数を記述しています
“document.location.href=の部分で変化があった時にそのURLにジャンプするという動作になります
this.optionsこの場合のthisは関数を実行中のセレクトタグです。そのoptionsつまりオプションタグすべてを指します
[this.selectedIndex].value;”こちらはselectedIndexで「選択されたすべての要素」のvalueつまりさっきPHPで指定したカテゴリーURLにジャンプするという仕組みです
まだまだWordPressでタームを表示したりタクソノミーを操作する方法はあるので、またバリエーションが増えたり紹介する機会を作りたいと考えています
コメントをお待ちしております