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

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

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

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

PHP

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

Q&A

解決済

1回答

2279閲覧

Wordpressで複数カスタムタクソノミー(ターム)で絞り込み検索する方法が、いまいちわかりません

tartnac

総合スコア18

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/05/28 04:17

編集2021/05/28 14:02

複数カスタムタクソノミー(ターム)で絞り込み検索をしたい

Wordpressのプラグイン「Custom Post Type UI」を使い、
カスタム投稿タイプ test を、そしてカスタムタクソノミーとして
area
employment
other
を作りました。

front-page.php には以下のような検索フォームを設置。
タームはそれぞれの value= の値を設定しています。
(例: カスタムタクソノミーareaのタームは、center east west south north)

php

1<form action="/test/" method="GET"> 2 <dl> 3 <dt>エリア</dt> 4 <dd> 5 <ul> 6 <li><input type="checkbox" name="form-area[]" value="center">中央区</li> 7 <li><input type="checkbox" name="form-area[]" value="east">東区</li> 8 <li><input type="checkbox" name="form-area[]" value="west">西区</li> 9 <li><input type="checkbox" name="form-area[]" value="south">南区</li> 10 <li><input type="checkbox" name="form-area[]" value="north">北区</li> 11 </ul> 12 </dd> 13 </dl> 14 <dl> 15 <dt>雇用形態</dt> 16 <dd> 17 <ul> 18 <li><input type="checkbox" name="form-employment[]" value="seiki">正規職員</li> 19 <li><input type="checkbox" name="form-employment[]" value="kikankeiyaku">期間契約職員</li> 20 <li><input type="checkbox" name="form-employment[]" value="part">パート</li> 21 </ul> 22 </dd> 23 </dl> 24 <dl> 25 <dt>その他</dt> 26 <dd> 27 <ul> 28 <li><input type="checkbox" name="form-other[]" value="sinsotu">新卒</li> 29 <li><input type="checkbox" name="form-other[]" value="musikaku">無資格OK</li> 30 <li><input type="checkbox" name="form-other[]" value="blank">ブランクありOK</li> 31 </ul> 32 </dd> 33 </dl> 34 <div> 35 <input type="submit" value="検索する"> 36 </div> 37</form>

これをGETで archive-test.php に送信し、受け取った値を元にアーカイブページに結果を表示したいのです。
以下がその archive-test.php です。

php

1<?php 2 //【エリア】チェックボックスにチェックが入っていたら~ 3 if(isset($_GET['form-area'])) { 4 $form_area = $_GET['form-area']; 5 $tax_query_area = array( 6 'taxonomy' => 'area', 7 'field' => 'slug', 8 'terms' => $form_area 9 ); 10 } 11 //【雇用形態】チェックボックスにチェックが入っていたら~ 12 if(isset($_GET['form-employment'])) { 13 $form_employment = $_GET['form-employment']; 14 $tax_query_employment = array( 15 'taxonomy' => 'employment', 16 'field' => 'slug', 17 'terms' => $form_employment 18 ); 19 } 20 //【その他】チェックボックスにチェックが入っていたら~ 21 if(isset($_GET['form-other'])) { 22 $form_other = $_GET['form-other']; 23 $tax_query_other = array( 24 'taxonomy' => 'other', 25 'field' => 'slug', 26 'terms' => $form_other 27 ); 28 } 29 30 //検索条件を指定する 31 $args = array ( 32 'post_status' => 'publish', 33 'post_type' => 'test', 34 'tax_query' => array ( 35 'relation' => 'AND', 36 $tax_query_area, //ここの記述が怪しい1 37 $tax_query_employment, //ここの記述が怪しい2 38 $tax_query_other, //ここの記述が怪しい3 39 ) 40 ); 41?> 42 43<?php $the_query = new WP_Query($args); ?> 44 <?php if($the_query->have_posts()): ?> 45 <?php while($the_query->have_posts()): $the_query->the_post(); ?> 46 <p> 47 <?php the_title(); ?> 48 </p> 49 </div> 50 <?php endwhile; ?> 51 <?php endif; ?> 52<?php wp_reset_query(); ?>

しかし、この記述だと該当の結果が「無し」になってしまうようで、検索結果に何も表示されないのです……。

試したこと

試しに //ここの記述が怪しい1 を残して、2~3を削除すると条件に該当した記事が表示されました。
同様に //ここの記述が怪しい2 のみや 3のみでやっても、条件に該当した記事が表示されます。
しかし、複数同時に 1~3 を記述すると結果が無しになってしまうのです。
また、

php

1 var_dump($tax_query_area); 2 var_dump($tax_query_employment); 3 var_dump($tax_query_other); 4 var_dump($args);

としてみた感じでは、値はちゃんと入っているようでした。

思っていること

これは恐らく、

php

1 'tax_query' => array ( 2 'relation' => 'AND', 3 $tax_query_area, //ここの記述が怪しい1 4 $tax_query_employment, //ここの記述が怪しい2 5 $tax_query_other, //ここの記述が怪しい3 6 )

ここの書き方が間違っているんだろうな、と思っています。
しかしいくらGoogleで検索をかけても、どうにもこんな感じで記述されているようにしか思えず……。
どなたかアドバイスをいただければ幸いです。

補足

現在、archive-test.php に記述しているやり方では、front-page.php からの検索フォームに
form-area
form-employment
form-other
の3つ全てにチェックが入っていなかった場合、チェックされていないものに null が入ってしまってどのみち正しく検索できないのではと思っています。
これを防ぐために、チェックが入っていた場合のみに以下の箇所に form-area や form-employment 等が追加されていく方法にしたいのですが、これも考えるもののやはりわからず……。

php

1 'tax_query' => array ( 2 'relation' => 'AND', 3 $tax_query //←複数項目にわたってチェックされてる場合、ここが自動的に増えていくようにしたい 4 )

こうすると自動的にできるよ、というヒント的なものでもいただければ嬉しいです。
何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

あれこれいじったため、理由がわからないのですが……結果だけご報告いたしますと解決いたしました!

「具体的にどの部分が問題だったのか」

が結局わからずじまいで、何ともモヤモヤしたものが残ってしまうのですが、上記の書き方で特に問題は無かったように思えます。

お騒がせいたして申し訳ございませんでした。ありがとうございました。

投稿2021/05/29 02:13

tartnac

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問