質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2618閲覧

【絞り込み検索】子タームにチェックがない場合、親タームに属する検索結果を表示したい

iambeginnerr

総合スコア12

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/11/12 06:40

編集2020/11/13 03:59

前提・実現したいこと

wordpressで地域ポータルサイトを制作中です。
店舗個別ページはカスタム投稿で作成しました。この店舗個別ページを検索したく、以下の仕様で検索システムを実装しようとしているのですが・・・

カスタム投稿:restaurant
カスタム分類1:area_cat(エリア指定は2階層 都道府県-市区町村)
カスタム分類2:genre_cat(ジャンル指定は2階層 親カテゴリ-子カテゴリ)
カスタム分類1に属するターム:allarea(全国を指定する際に使用、都道府県と同階層)

ページ遷移
1、トップページにて、都道府県(例:東京都)を選択
2、東京都の飲食店一覧が表示される(テンプレート:taxonomy-area_cat.phpを使用)、このページに市区町村とジャンルで絞り込むエリアを設置(東京都以下の市区町村×ジャンルでの絞り込み、例:中央区×和食など)。
3、「中央区×和食」で絞り込んだ記事一覧が表示される
上記のような流れで検索結果ページまでたどり着くことができました。

実現したいこと
上記ページ遷移の「2」で、市区町村が選択されず、ジャンルのみ選択された場合、検索結果ページ(ページ遷移「3」)で、「東京都×和食」の結果を表示させたいです。

該当のソースコード

taxonomy-area_cat.php

<form action="<?php echo get_post_type_archive_link('restaurant'); ?>" method="get"> <h3>エリアを選択(市町村一覧を表示しています)</h3> エリアを選択(市町村一覧を表示しています) <?php $my_id = get_queried_object_id(); ?> <?php $arg = array( 'hide_empty'=>false, 'parent'=>$my_id, 'orderby' =>'ID' ); echo my_tax_checkbox('area_cat',$arg); ?> <h3>ジャンルを選択</h3> <!-- 一括で出力する方法が分からず親タームごとに表示させました。もっとスマートな書き方があると思うのですが...--> <ul> <li><div class="main_menu"><i class="fas fa-pencil-alt"></i>和食</div> <ul class="sub_menu"> <?php $taxonomy_name = 'genre_cat'; $term_id = '1'; $termchildren = get_term_children( $term_id, $taxonomy_name ); foreach ( $termchildren as $child ) :?> <?php $term = get_term_by( 'id', $child, $taxonomy_name );?> <li><input type="radio" id="<?php echo $term->slug; ?>" name="genre_cat" value="<?php echo $term->slug; ?>"><label for="<?php echo $term->slug; ?>"><?php echo $term->name; ?></label><div class="radio-check"></div></li> <?php endforeach; ?> </ul> </li> <li><div class="main_menu"><i class="fas fa-pencil-alt"></i>イタリアン</div> <ul class="sub_menu"> <?php $taxonomy_name = 'genre_cat'; $term_id = '2'; $termchildren = get_term_children( $term_id, $taxonomy_name ); foreach ( $termchildren as $child ) :?> <?php $term = get_term_by( 'id', $child, $taxonomy_name );?> <li><input type="radio" id="<?php echo $term->slug; ?>" name="genre_cat" value="<?php echo $term->slug; ?>"><label for="<?php echo $term->slug; ?>"><?php echo $term->name; ?></label><div class="radio-check"></div></li> <?php endforeach; ?> </ul> </li> </ul> <input type="submit" value="検索"> </form>

functions.php

//複合検索 function my_tax_checkbox($tax,$arg) { $qv = get_query_var($tax); $terms = get_terms($tax,$arg); $output = ''; foreach($terms as $t) { $checked = ''; if(is_array($qv)) { if(in_array($t->slug,$qv)) $checked = ' checked'; } else { if($t==$qv) $checked = ' checked'; } $output .= '<li class="list__item"><label class="label--checkbox"><input type="checkbox" class="checkbox" name="'.$tax.'[]" value="'.$t->slug.'"'.$checked.'><span>'.$t->name.'</span></label>'."\n"; } echo $output; }

search.php
(他の方の過去の質問を参考にし、見よう見まねで入力してみました)

<?php $s = $_GET['s']; $area = $_GET['area_cat']; $area_type = $_GET['area_cat']; $genre = $_GET['genre_cat']; if($area){ $taxquerysp[] = array( 'taxonomy'=> $area_cat, 'terms'=> $area, 'field'=>'slug', 'operator'=>'AND' ); } // 以下追記のソースです。 // ターム情報がない場合は指定のタクソノミーに属するターム全てで検索 else { // ターム一覧を取得しスラッグ名を配列に格納 $term_objs = get_terms($area_type); $terms = array(); foreach($term_objs as $term){ $terms[] = $term->slug; } // 取得したターム一覧をqueryの条件に $taxquerysp[] = array( 'taxonomy' => 'area_cat', 'field' => 'slug', 'terms' => $terms, 'operator' => 'IN', ); } if($genre){ $taxquerysp[] = array( 'taxonomy'=>'genre_cat', 'terms'=> $genre, 'field'=>'slug', 'operator'=>'AND' ); } $taxquerysp['relation'] = 'AND'; ?> <?php query_posts( array( 'post_type' => 'custom_post', 'tax_query' => $taxquerysp, 's' => $s, ) );?> <ul id="item_list"> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php get_template_part('loop-item_list'); ?> <?php endwhile; else : ?> <li>該当なし</li> <?php endif;wp_reset_query(); ?> </ul>

試したこと

search.phpへ新たな記載をしてみたのですが、見よう見まねでしてこのような道筋で合っているのかも疑問です。
どうか皆様の知恵をお貸しください。
よろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

<参考>
こちらの質問を参考に解決いたしました。

投稿2020/12/07 02:53

iambeginnerr

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問