[WordPress] カテゴリー・タームの一覧をセレクトボックス形式で表示したい
記事の一覧をターム情報で絞り込むといった動作をさせたいとき、タームの一覧をセレクトボックスで表示したい場合があります。
そんなときにさっと使えるサンプルコードを検討してみました。
サンプルコード
<form action="" method="get">
<select name="select_xxx">
<?php
$terms = get_terms('tax_xxx');
if(!empty($terms) && !is_wp_error($terms)) {
foreach($terms as $term) {
echo '<option value="'. $term->slug .'">'. $term->name .'</option>';
}
}
?>
</select>
</form>
「get_terms」関数を使用することで、引数に指定したタクソノミーのターム情報を配列で取得できます。
取得した配列情報をforeach関数で一つずつ取り出してループさせます。サンプルコードでは「$term->slug」でセレクトボックスのvalueにタームのスラッグを設定しています。
取得したセレクトボックスの値をクエリに反映させる
上記サンプルコードでフォームの内容をGET送信したあと、セレクトボックスに設定されたvalue(=タームのスラッグ)を使って記事の絞り込みを行う場合のサンプルコードもご紹介します。
<?php
$args = array(
'post_type' => 'post_type_xxx',
);
if($_GET['select_xxx']) {
$args += array(
'tax_query' => array(
array(
'taxonomy' => 'tax_xxx',
'field' => 'slug',
'terms' => '$_GET['select_xxx']'
)
)
);
}
$the_query = new WP_Query($args);
if($the_query->have_posts()) {
while($the_query->have_posts()) {
$the_query->the_post();
?>
〜
<?php
}
}
wp_reset_postdata();
?>
「$_GET['select_xxx'])」に値が設定されている(=セレクトボックスのデータがGET方式で渡されている)ときにだけ、「tax_query」の「terms」にセレクトボックスの値(スラッグ)を設定します。
設定の際に「+=」の代入演算子を使うことで、状況に応じてパラメーターの有無を切り替えています。
設定されたパラメーターで「WP_Query」を実行することで、選ばれたセレクトボックスに該当する記事絞り込まれて出力されます。
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。