【WordPress】カスタムタクソノミーのタームの一覧をセレクトボックスに突っ込む
このブログの最初の記事がカスタム投稿タイプとカスタムタクソノミーの自作でした。
カスタム投稿は投稿という形でデータを入れ。
その投稿と分類するのにカスタムタクソノミーも一緒に作っておいた感じです。
今回はカスタムタクソノミーのタームをセレクトボックスに突っ込んで行きます。
タクソノミー?ターム?
ワードプレスを触っていると、言葉のニュアンスにつまづくことがあります。・・・自分だけかも知れませんが。
最初から用意されている「投稿」には「カテゴリー」と「タグ」という分類に使えるものがあります。
ですが、カスタム投稿タイプを作ると、急に「タクソノミー」という言葉が出てきますが。
実際に触ってみると、設定にもよりますが見慣れた「カテゴリー」や「タグ」の編集画面が出てきます。
そうすると、「タクソノミー=カテゴリー」と理解してしまいますが。間違っては無いですが、合ってもないというものみたいですね。
自分はそういう専門家ではありませんが。分類学という学問があるみたいで、その「分類法」が「タクソノミー」となります。
で、カテゴリーは分類法の一つ。つまり、カテゴリーで分けるのは手段の一つであると。
タグも同様です。
なので、「タクソノミー」は「なんかの方法・法則で分類するよ」ということみたいです。
で、その分類名・・・カテゴリー名というやつが、カスタムタクソノミーだと「ターム」と呼ばれます。
カテゴリーというタクソノミーで分けた分類名だから、カテゴリー名というターム。
ということです。・・・余計分かりにくくなった気がします。
以上、長い余談でした。
まぁ簡単に今回の内容を書くと、分類したカテゴリー名の一覧を作りたい。ということです。
参考:Taxonomy‐Wikipedia(リンク先は英語版です。)
タクソノミーのターム情報を取得するget_terms()
実際に作業を始めるまで、標準のカテゴリーと同じだと思い込みすぎて、なんかおかしいと一人唸っていたのが私です。
今回取得したいのは、タームの情報なのでget_terms()を利用します。
get_terms()を利用してターム情報を取得する方法の需要は結構あるみたいで、検索してみると様々なタームの取得方法が紹介されていますね。
個人的にわかりやすかったコードを今回は利用させていただくことに。
ついでにセレクトボックスに格納します。
<label for="test_term_v">ターム</label>
<select name="test_term_v">
<option value="" >ターム選択</option>
<?php
//親要素(親ターム)の情報を取得
$parent_term = get_terms( 'test-cat', array( 'slug' => 'test_term' ) );
//子要素(子ターム)の情報を取得
$child_terms = get_terms( 'test-cat', array( 'parent' => $parent_term[0]->term_id ) );
//配列で渡されるのでforeach
foreach( $child_terms as $term ){
//検索値と子タームが一致したらchecked
if( $term->name === $test_term_search_value ){
echo '<option value="' . $term->name . '" selected>' . $term->name . '</option>';
} else {
echo '<option value="' . $term->name . '">' . $term->name . '</option>';
}
}
?>
</select>
今回利用するタクソノミーは階層を持たせていて、タームに親子関係がありました。
その子要素となるタームの情報だけをセレクトボックスに格納させます。
get_terms()は第一引数で情報を取得したいタームのあるタクソノミーを指定します。’test-cat’が作成したカスタムタクソノミーに当たります。
そして、第ニ引数で取得するタームの条件を配列で指定することができます。
パラメータについて詳しくは、get_terms()のリファレンスを御覧ください。細かく色々と指定できるようですし。
最初のget_terms()では親要素のタームを指定し、情報を取得しています。
その中の情報を利用して小タームの情報を取得していきますが。
get_terms()は配列で返されるので。
2つ目のget_terms()では取得した親タームの一番最初の配列要素のIDを親指定('parent’)にし、子タームの情報を取得しています。
それをforeachで配列の全要素で実行し、子タームの情報をセレクトボックスに突っ込んでいます。
今回は「$term->name」で子タームの名称を使っていますが。
「$term->slug」なら子タームのスラッグ。
「$term->term_id」なら小タームのIDを返すことができます。
利用目的に合わせて指定しましょう。
この後
この後にWP_Queryのパラメータtax_queryを使って絞り込み検索に反映・・・まで書こうと思いましたが、ここで切ることに。
tax_queryも便利なパラメータなので、触れる程度はもったいなかなと思いまして。
タクソノミーも便利に使えるものです。
ディスカッション
コメント一覧
まだ、コメントがありません