前提・実現したいこと
wordpressでサイト制作をしています。
カスタム投稿...shop
タクソノミー1...area_cat(エリアの分類)
タクソノミー2...genre_cat(ジャンルの分類)
・以下のように、日本を地方ごとに分け、都道府県一覧を表示している箇所があります。この箇所で、都道府県を選択すると市区町村一覧が表示されるようになっています。
<北海道・東北>
北海道
∟札幌市、函館市...
青森
秋田
岩手
山形
宮城
福島
<関東>
茨城
栃木...
・この表示は、taxonomy-genre_cat.phpというテンプレート内に表示しており、「https://ドメイン/genre_cat/japanese/」というページでは、japanese(日本食)というターム以下に属するshop(記事)の件数を取得したいです。つまり、先に述べた例ですと、「札幌市の日本食屋の件数」「函館市の日本食屋の件数」を取得したいという意味です。
■実現したい表示例
<北海道・東北(1000)>
北海道(100)
∟札幌市(10)、函館市(20)...
青森(100)
秋田(100)
岩手(100)
山形(100)
宮城(100)
福島(100)
<関東(5000)>
茨城(100)
栃木(100)...
該当のソースコード
もともと、地方と都道府県部分はプルダウン形式で以下のコードで表示しておりました。
<div id="category"> <ul id="menu"> <li><div class="main_menu">北海道・東北</div> <?php $my_tax = 'area_cat'; //取得したいタクソノミー名 $parent_terms = get_terms( $my_tax, array('hide_empty' => false, 'slug'=>array('hokkaido','aomori','akita','yamagata','iwate','miyagi','fukushima'),'parent' => 0) ); //第一階層のタームだけ取得 if ( !empty( $parent_terms ) ) : echo '<ul class="sub_menu">'; //第1ループ foreach ( $parent_terms as $pt ) : $pt_id = $pt->term_id; $pt_name = $pt->name; $pt_url = get_term_link($pt); ?> <li class="pt"><span class="pt-span"><?php echo $pt_name; ?></span> <?php $child_terms = get_terms( $my_tax, array('hide_empty' => false, 'parent' => $pt_id) ); if ( !empty( $child_terms ) ) : echo '<ul class="third_menu">'; //第2ループ foreach ( $child_terms as $ct ) : $ct_id = $ct->term_id; $ct_name = $ct->name; $ct_slug =$ct->slug; $ct_url = get_term_link($ct); ?> <li><label class="label--checkbox"><input type="checkbox" class="checkbox" id="<?php echo $ct_slug?>" name="area_cat" value="<?php echo $ct_slug?>"><span><?php echo $ct_name; ?> /*ここから絞り込み件数表示*/ <?php $args = array( 'post_type' => 'shop', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'genre_cat', 'field' => 'term_id', 'terms' => $genre_term_id, ), array( 'taxonomy' => 'area_cat', 'field' => 'slug', 'terms' => $ct_slug, ), ), ); $my_query = new WP_Query($args); $count_posts = $my_query->found_posts; $allarea = get_term_by( 'slug', 'allarea-c', 'area_cat' ); $all_areacount = $allarea->count; $allposts = $all_areacount + $count_posts; echo '('.$allposts.')'; ?> /*ここまで絞り込み件数表示*/ </span></label></li> <?php endforeach; //End : 第2ループ echo '</ul><!--.third_menu-->'; endif; ?> </li> <?php endforeach; //End : 第1ループ echo '</ul><!--.sub_menu-->'; endif; ?> </li> <li><div class="main_menu">関東</div> /*以下、上記「北海道・東北」の親スラッグ名だけ変更して、同じコードをコピペしました。*/ ・ ・ ・ </li> </ul><!--#menu--> </div><!--#category-->
結果
ソースコードの絞り込み件数表示部分を、「北海道・東北」「関東」「中部」あたりまでコピペしたところで、ページ自体が表示されなくなりました。(「中部」以下が表示されないという現象)
同じ処理を繰り返しすぎて、DBからの返答がなくなったのかなと思い、もっと簡潔にまとめられないか調べたのですが、PHPは初心者でどのようなコードで解決するのかわかりませんでした。
ちなみに、絞り込み件数表示部分を、「北海道・東北」「関東」のみ適用すると思った通りの表示になりました。
こういった場合はどのように記述するのが望ましいのでしょうか。
参考になるページでも構いませんので、どうかお力をお貸しください!
※上記コードの「$allarea」は、「全国」に該当するshopで全ての件数に加算される仕様になっています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。