情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。
ワードプレスのカスタム投稿タイプ一覧でプルダウンで2つのタクソノミーを絞り込む。
- 2つのプルダウンを連動、カテゴリーを選択して店舗を選択するとジャンプ
-
<select id="cate"> <option value="">カテゴリーを選択</option> <?php $terms = get_terms('news_cat'); if( $terms && !is_wp_error($terms) ){ ?> <?php foreach ( $terms as $term ) { ?> <option value="<?php echo $term->slug; ?>"><?php echo $term->name; ?></option> <?php } } ?> </select> <select style="padding:20px;border:1px #ccc solid;min-width:200px;" id="shop_name" onChange="location.href=value;"> <option value="">店舗を選択</option> </select> <script type="text/javascript"> var array = new Array(); <?php $terms = get_terms('news_cat'); if( $terms && !is_wp_error($terms) ){ ?> array[''] = new Array({val:"0", label:"店舗を選択"}); <?php $count=1; foreach ( $terms as $term ) { if ($count==1) { ?> array["<?php echo $term->slug; ?>"] = new Array( {val:"", label:"店舗を選択"}, <?php $shops = get_terms('shop_name'); if( $shops && !is_wp_error($terms) ){ ?><?php foreach ( $shops as $shop ) { ?> <?php $args = array('post_type' => 'news', 'posts_per_page' => '-1', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'news_cat', 'field' => 'slug', 'terms' => $term->slug, ), array( 'taxonomy' => 'shop_name', 'field' => 'slug', 'terms' => $shop->slug, ) ) ); $the_query = new WP_Query($args); if ($the_query->have_posts()) : ?> {val:"<?php echo esc_url( home_url( '/' ) ); ?>news?news_cat=<?php echo $term->slug; ?>&shop_name=<?php echo $shop->slug; ?>", label:"<?php echo $shop->name; ?>"}, <?php endif; wp_reset_postdata(); ?><?php } } ?> );<?php } else { ?> array["<?php echo $term->slug; ?>"] = [ {val:"", label:"店舗を選択"}, <?php $shops = get_terms('shop_name'); if( $shops && !is_wp_error($terms) ){ ?><?php foreach ( $shops as $shop ) { ?> <?php $args = array('post_type' => 'news', 'posts_per_page' => '-1', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'news_cat', 'field' => 'slug', 'terms' => $term->slug, ), array( 'taxonomy' => 'shop_name', 'field' => 'slug', 'terms' => $shop->slug, ) ) ); $the_query = new WP_Query($args); if ($the_query->have_posts()) : ?> {val:"<?php echo esc_url( home_url( '/' ) ); ?>news?news_cat=<?php echo $term->slug; ?>&shop_name=<?php echo $shop->slug; ?>", label:"<?php echo $shop->name; ?>"}, <?php endif; wp_reset_postdata(); ?><?php } } ?> ]; <?php } $count++; } } ?> document.getElementById('cate').onchange = function(){ shop = document.getElementById("shop_name"); shop.options.length = 0 var changedPref = cate.value; for (let i = 0; i < array[changedPref].length; i++) { var op = document.createElement("option"); value = array[changedPref][i] op.value = value.val; op.text = value.label; shop.appendChild(op); } } </script>
連動するスクリプトはこちら参照
再度 {val:””, label:”店舗を選択”},を入れているのは、選択肢が1つでもジャンプさせるため。