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

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

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

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

1回答

1134閲覧

チェックボックスを使用した、ユーザー情報カスタムフィールドの絞り込み

wimaru

総合スコア16

WordPress

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2019/07/11 08:12

編集2019/07/11 09:04

■やりたいこと
ユーザ情報に登録されている、カスタムフィールドをキーにした複数条件の絞り込み検索
■表示ページ
固定ページ
■使用したプラグイン
Advanced Custom Fields
■検索用プラグイン
サーバーの仕様上、導入することができませんでした。

ユーザー登録時に、ACFで設定した下記カスタムフィールドに情報を入れ込んでいます。
必須項目としており、空データはありません。
また、登録ユーザー一覧は、固定ページに表示出来ております。

ACFにてカスタムフィールドを作成。
ラベル:名前
①出身国:country ←ラジオボタン
選択肢:日本,アメリカ,中国,フランス,他
②移動手段:transportation ←チェックボックス
選択肢:自家用車,自転車,バイク,徒歩,公共交通機関,他

上記2つを絞り込みのキーとして検索をさせたくて、下記フォームを作成。

<form role="search" method="get" id="searchform" action="<?php echo home_url(); ?>" > <label for="s"></label> <h2>出身国</h2> <input type="hidden" name="s" id="s" class="hiden" priceholder="検索" /> <input type="checkbox" name="country[]" value="日本" id="c05"><label for="c05">日本</label> <input type="checkbox" name="country[]" value="アメリカ" id="c04"><label for="c04">アメリカ</label> <input type="checkbox" name="country[]" value="中国" id="c03"><label for="c03">中国</label> <input type="checkbox" name="country[]" value="フランス" id="c02"><label for="c02">フランス</label> <input type="checkbox" name="country[]" value="他" id="c01"><label for="c01">他</label> <br><br> <h2>移動手段</h2> <input type="checkbox" name="trans[]" value="自家用車" id="l06"><label for="l06">自家用車</label> <input type="checkbox" name="trans[]" value="自転車" id="l05"><label for="l05">自転車</label> <input type="checkbox" name="trans[]" value="バイク" id="l04"><label for="l04">バイク</label> <input type="checkbox" name="trans[]" value="徒歩" id="l03"><label for="l03">徒歩</label> <input type="checkbox" name="trans[]" value="公共交通機関" id="l02"><label for="l02">公共交通機関</label> <input type="checkbox" name="trans[]" value="他" id="l01"><label for="l01">他</label> <div class="read_btn"><button type="submit" value="" id="submit" class=""/>この条件で検索する</button></div> </form>

受取側:search.php

<?php $s = $_GET['s']; $country = implode(',', $_GET['country']); $language = implode(',', $_GET['language']); if($country){ $meta_query[] = array( 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'country', 'value' => $country, 'compare' => 'LIKE' ), array( 'key' => 'language', 'value' => $language, 'compare' => 'LIKE' ), ), ); } $args = array( 'meta_query' => $meta_query, 'role' => 'ユーザー権限限定のため', 's' => $s, 'posts_per_page' => -1 ); ?> <?php $wp_user_query = new WP_User_Query( $args ); #$users = $wp_user_query->get_results(); ?> <?php if ( ! empty( $wp_user_query->results ) ) :?> <?php foreach ( $wp_user_query->results as $user ) : $uid = $user->ID; $userData = get_userdata($uid); ?> <?php include /*表示のためのメタ取得インクルードファイル.php ?> <?php endforeach; ?> <?php else: ?> <p>ユーザーが見つかりません。</p> <?php endif;?>

それぞれ単一選択でしたら表示されますが、
国や移動手段を複数選択すると「ユーザーが見つかりません。」となってしまいます。
色々やってみたのですが、どうしてもうまくいかず、ご教授いただけますと助かります。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

クラスリファレンス/WP Meta Query - WordPress Codex 日本語版

value (文字列|配列) - カスタムフィールドの値。compareが 'IN', 'NOT IN', 'BETWEEN',または 'NOT BETWEEN'の時のみ、配列にできる。

ですから、compareLIKE ではなく IN にしてみてください。

追記

コメントより

php

1 2<?php 3$s = $_GET['s']; 4$country = implode( ',', $_GET['country'] ); 5$trans = implode( ',', $_GET['trans'] ); 6 7if ( $country ) { 8 $meta_query[] = array( 9 'meta_query' => array( 10 'relation' => 'AND', 11 array( 12 'key' => 'country', 13 'value' => $country, 14 'compare' => 'IN' 15 ), 16 array( 17 'key' => 'trans', 18 'value' => $trans, 19 'compare' => 'IN' 20 ), 21 ), 22 ); 23} 24$args = array( 25 'meta_query' => $meta_query, 26 'role' => 'ユーザー権限限定のため', 27 's' => $s, 28 'posts_per_page' => -1, 29);

とのことですが、

  1. ACF でのカスタムフィールドのフィールド名が transportation であれば、'key' => 'trans' ではなく 'key' => 'transportation'

クラスリファレンス/WP Meta Query - WordPress Codex 日本語版

  1. WP_User_Query の検索パラメータは s ではなく search

クラスリファレンス/WP User Query - WordPress Codex 日本語版

になります。

投稿2019/07/11 09:05

編集2019/07/12 01:12
YukiYamashina

総合スコア1011

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

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

wimaru

2019/07/11 09:40

配列な事をすっかり忘れてました。ありがとうございます。 INにしたところ、表示出来たのですが、 「アメリカか日本か中国に住んでいて、移動手段がバイクの人を絞り込みたい。」ということで、チェックを入れるのですが、結果として 「アメリカか日本か中国に住んでいる人」が表示されてしまい、「移動手段」が加味されません。 'relation' => 'OR' を 'relation' => 'AND' に変更すると チェックを全く入れない状態だと、全てのユーザーが表示され、 国か移動手段のどちらかにチェックを入れると「ユーザーが見つかりません。」となってしまいます。
YukiYamashina

2019/07/11 09:55

> 「移動手段」が加味されません。 記載されている search.php で $_GET['trans'] が meta_query に指定されていないからではないでしょうか?(検索フォーム側にはない $_GET['language'] は指定されている)
wimaru

2019/07/11 10:01

$_GET['language'] はこちらへ転記した時の単純ミスです。ごめんなさい。 print_rで$_GET['trans'] を表示させると、カンマ区切りで表示されますので データの受け渡しは、行われているようです。
YukiYamashina

2019/07/11 14:22

> $_GET['language'] はこちらへ転記した時の単純ミスです。ごめんなさい。 該当箇所を修正していただけますでしょうか?
wimaru

2019/07/12 01:12 編集

<?php $s = $_GET['s']; $country = implode(',', $_GET['country']); $trans= implode(',', $_GET['trans']); if($country){ $meta_query[] = array( 'meta_query' => array( 'relation' => 'AND', /*ここをORと切り替えてのチェックをしました*/ array( 'key' => 'country', 'value' => $country, 'compare' => 'IN' /*LIKEからINに変更*/ ), array( 'key' => 'trans', 'value' => $trans, 'compare' => 'IN' /*LIKEからINに変更*/ ), ), ); } $args = array( 'meta_query' => $meta_query, 'role' => 'ユーザー権限限定のため', 's' => $s, 'posts_per_page' => -1 ); ?> <?php $wp_user_query = new WP_User_Query( $args ); #$users = $wp_user_query->get_results(); ?> <?php if ( ! empty( $wp_user_query->results ) ) :?> <?php foreach ( $wp_user_query->results as $user ) : $uid = $user->ID; $userData = get_userdata($uid); ?> <?php include /*表示のためのメタ取得インクルードファイル.php ?> <?php endforeach; ?> <?php else: ?> <p>ユーザーが見つかりません。</p> <?php endif;?>
wimaru

2019/07/12 00:54

コメントありがとうございます。 こんな感じです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問