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

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

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

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

PHP

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

Q&A

解決済

2回答

699閲覧

wp 絞り込み検索機能を追加したい

okaka33

総合スコア2

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/06/14 09:50

編集2021/06/15 03:52

前提・実現したいこと

現在、絞り込み検索機能を追加する為の実装を行なっております。
1つ条件の絞り込みはなんとかできるようになったのですが
2条件ある場合の絞り込みがどうしても上手くいきません。
$_GET[]の項目に2つのカスタムタクソノミー名が入ればいいのではと考えています。

色々と調べてはみたのですがなかなか解決に至りませんでした。。。
もし、ご存知の方がいらっしゃったら教えていただけないでしょうか?
お手数をおかけしますがよろしくお願い致します。

該当のソースコード

フォーム側PHP

<aside class="l-aside"> <div class="p-aside"> <form role="search" method="get" action="<?php echo esc_url(home_url('/')); ?>"> <p class="p-aside_text">イベントを検索する</p> <dl class="p-aside__selectList"> <dt class="p-aside__listTitle">種目</dt> <dd class="p-aside__selectWrap"> <select class="p-aside__select" name="sports"> <option value="">選択してください</option> <?php $terms = get_terms('sports'); foreach ( $terms as $term ) : ?> <option value="<?php echo $term->slug; ?>" name="<?php echo $term->slug; ?>[]"><?php echo $term->name; ?></option> <?php endforeach; ?> </select> </dd> <dt class="p-aside__listTitle">都道府県</dt> <dd class="p-aside__selectWrap"> <select class="p-aside__select" name="prefectures"> <option value="">選択してください</option> <?php $terms = get_terms('prefectures'); foreach ( $terms as $term ) : ?> <option value="<?php echo $term->slug; ?>" name="<?php echo $term->slug; ?>[]"><?php echo $term->name; ?></option> <?php endforeach; ?> </select> </dd> </dl> <input type="hidden" name="s" value="<?php the_search_query(); ?>"> <p class="p-aside__buttonWrap"><input type="submit" class="p-aside__button c-button" value="検索"></input></p> </form> </div> </aside> <main> <div class="p-event"> <ul class="p-event__cards"> <?php $wpQuery = subLoop(12,$paged,"single-event"); if($wpQuery -> have_posts()): while($wpQuery -> have_posts()): $wpQuery -> the_post(); ?> <li class="p-event__cardWrap"> <a class="c-card" href="<?php the_permalink(); ?>"> <p class="c-card__thumbnail" style="background-image: url(<?php echo wp_get_attachment_url(get_post_thumbnail_id($post_id)); ?>)"></p> <dl class="c-card__itemList"> <dt class="c-card__itemTitle">大会名</dt> <dd class="c-card__itemData"> <?php if(mb_strlen(get_field("大会名"))>15) { $hoge= mb_substr(get_field("大会名"),0,14) ; echo $hoge. … ;} else {echo get_field("大会名");} ?> </dd> <dt class="c-card__itemTitle">チーム名</dt> <dd class="c-card__itemData"> <?php if(mb_strlen(get_field("チーム名"))>15) { $hoge= mb_substr(get_field("チーム名"),0,14) ; echo $hoge. … ;} else {echo get_field("チーム名");} ?> </dd> <dt class="c-card__itemTitle">場所</dt> <dd class="c-card__itemData"> <?php if(mb_strlen(get_field("場所"))>15) { $hoge= mb_substr(get_field("場所"),0,14) ; echo $hoge. … ;} else {echo get_field("場所");} ?> </dd> <dt class="c-card__itemTitle">日時</dt> <dd class="c-card__itemData"> <?php if(mb_strlen(get_field("日時"))>18) { $hoge= mb_substr(get_field("日時"),0,17) ; echo $hoge. … ;} else {echo get_field("日時");} ?> </dd> </dl> </a> </li> <?php endwhile; endif; wp_reset_postdata(); ?> </ul> </div> </main>

出力側PHP

<aside class="l-aside"> <div class="p-aside"> <form role="search" method="get" action="<?php echo esc_url(home_url('/')); ?>"> <p class="p-aside_text">イベントを検索する</p> <dl class="p-aside__selectList"> <dt class="p-aside__listTitle">種目</dt> <dd class="p-aside__selectWrap"> <select class="p-aside__select" name="sports"> <option value="">選択してください</option> <?php $terms = get_terms('sports'); foreach ( $terms as $term ) : ?> <option value="<?php echo $term->slug; ?>" name="<?php echo $term->slug; ?>[]"><?php echo $term->name; ?></option> <?php endforeach; ?> </select> </dd> <dt class="p-aside__listTitle">都道府県</dt> <dd class="p-aside__selectWrap"> <select class="p-aside__select" name="prefectures"> <option value="0">選択してください</option> <?php $terms = get_terms('prefectures'); foreach ( $terms as $term ) : ?> <option value="<?php echo $term->slug; ?>" name="<?php echo $term->slug; ?>[]"><?php echo $term->name; ?></option> <?php endforeach; ?> </select> </dd> </dl> <input type="hidden" name="s" value="<?php the_search_query(); ?>"> <p class="p-aside__buttonWrap"><input type="submit" class="p-aside__button c-button" value="検索"></input></p> </form> </div> </aside> <main> <div class="p-event"> <ul class="p-event__cards"> <!-- 下から検索結果 --> <?php $hoge = $_GET['sports']; if($hoge) { $taxquery_taxonomy = array( 'taxonomy' => 'sports', 'terms' => $hoge, 'field' => 'slug', ); } $args = array( 'post_type' => 'post', 'posts_per_page' => 12, 's' => get_search_query(), 'tax_query' => array( 'relation' => 'AND', $taxquery_taxonomy, ), ); $sub_query = new WP_Query( $args ); if ( $sub_query->have_posts() ) : while ( $sub_query->have_posts() ) : $sub_query->the_post(); ?> <li class="p-event__cardWrap"> <a class="c-card" href="<?php the_permalink(); ?>"> <p class="c-card__thumbnail" style="background-image: url(<?php echo wp_get_attachment_url(get_post_thumbnail_id($post_id)); ?>)"></p> <dl class="c-card__itemList"> <dt class="c-card__itemTitle">大会名</dt> <dd class="c-card__itemData"> <?php if(mb_strlen(get_field("大会名"))>15) { $hoge= mb_substr(get_field("大会名"),0,14) ; echo $hoge. … ;} else {echo get_field("大会名");} ?> </dd> <dt class="c-card__itemTitle">チーム名</dt> <dd class="c-card__itemData"> <?php if(mb_strlen(get_field("チーム名"))>15) { $hoge= mb_substr(get_field("チーム名"),0,14) ; echo $hoge. … ;} else {echo get_field("チーム名");} ?> </dd> <dt class="c-card__itemTitle">場所</dt> <dd class="c-card__itemData"> <?php if(mb_strlen(get_field("場所"))>15) { $hoge= mb_substr(get_field("場所"),0,14) ; echo $hoge. … ;} else {echo get_field("場所");} ?> </dd> <dt class="c-card__itemTitle">日時</dt> <dd class="c-card__itemData"> <?php if(mb_strlen(get_field("日時"))>18) { $hoge= mb_substr(get_field("日時"),0,17) ; echo $hoge. … ;} else {echo get_field("日時");} ?> </dd> </dl> </a> </li> <?php endwhile; endif; wp_reset_postdata(); ?> </ul> </div> </main>

補足情報(FW/ツールのバージョンなど)

・カスタムタクソノミーは
sports
prefectures
の2つになります

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

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

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

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

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

guest

回答2

0

php

1$tax_query = []; 2 3if ( isset($_GET['sports']) ) { 4 array_push( 5 $tax_query, 6 array( 7 'taxonomy' => 'sports', 8 'terms' => $hoge, 9 'field' => 'slug', 10 ); 11 ) 12} 13 14if ( isset($_GET['prefectures']) ) { 15 array_push( 16 $tax_query, 17 array( 18 'taxonomy' => 'prefectures', 19 'terms' => $hoge, 20 'field' => 'slug', 21 ); 22 ) 23} 24 25if ( count($tax_query) >= 2 ) //条件が2つの場合はrelationを指定する 26 $tax_query = array_merge( array('relation' => 'AND'), $tax_query ); 27 28$args = array( 29//略 30 'tax_query' = $tax_query; 31//略 32); //Parameter of "WP_Query()" 33

Codex タクソノミーのパラメータ

投稿2021/06/14 12:48

yuki84web

総合スコア1857

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

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

okaka33

2021/06/14 14:29

yuki84webさん コードありがとうございます! 1つご確認になるのですが、 ご教示いただいたコードはどの辺に入れるコードになりますでしょうか? 1つめのif文を入れるタイミングでエラーが出てしまいました。
okaka33

2021/06/15 03:49

tax_queryを改めて調べて、調整を行なったら解決することができました! ヒントいただきありがとうございます!
guest

0

自己解決

tax_queryを活用し条件に下記を追加したら解決ができました^^

array( 'taxonomy'=>'sports', 'terms'=>$hoge, 'field'=>'slug', 'operator'=>'AND' ), array( 'taxonomy'=>'prefectures', 'terms'=>$hoge2, 'field'=>'slug', 'operator'=>'AND' ),

投稿2021/06/15 03:51

okaka33

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問