kaiji
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: meta_queryのvalue値に渡す引数についてkjmtshさん
返信が遅くなってすみません。出来ました!
global $wpdb; $meta_key = 'genre'; $strings_to_search = $arr_gnr; $results = $wpdb->get_results($wpdb->prepare("SELECT user_id, meta_value FROM $wpdb->usermeta WHERE meta_key='%s'", $meta_key)); foreach ($results as $result) { $user_meta_values = maybe_unserialize($result->meta_value); if (!is_array($user_meta_values)) continue; foreach ($user_meta_values as $value) { if (in_array($value, $strings_to_search)) { $users_to_search[] = $result->user_id; break; } } } $args = array('include' => $users_to_search); $user_query = new WP_User_Query( $args );
検索結果はサクッと表示されました。
知識が浅く質問に必要な情報もお伝えすることができず、
ご迷惑をお掛けしましたが、皆様の適格なアドバイスに感謝しております。
今後ともどうぞ宜しくお願い致します。ありがとうございました。
フォーラム: 使い方全般
返信が含まれるトピック: meta_queryのvalue値に渡す引数についてkjmtshさん
分かりやすくご説明頂き、ありがとうございます。
よく理解できました。ユーザーデータは100件程です。(将来的にもmax500程度)
私もこのボリュームでこんなに時間がかかるものかと疑問をもっています。meta_keyは同じ属性です。
しかし頂いた記述で試してみましたがヒットさせることができませんでした。データベースに格納されているデータ例は、こちら↓です。
a:2:{i:0;s:7:”gourmet”;i:1;s:4:”cafe”;}kjmtshさんが仰るようにデータに曖昧さがあるためですよね?
データと照合する際に、キーワードのみを抽出して照合できますか?
a:2:{i:0;s:7:”gourmet”;i:1;s:4:”cafe”;} -> gourmet , cafeそれとも
a:2:{i:0;s:7:”gourmet”;i:1;s:4:”cafe”;}と格納するのではなく
gourmet , cafeと格納する方法を考えた方が良いのでしょうか?見当違いの質問でしたらすみません。
宜しくお願い致します。フォーラム: 使い方全般
返信が含まれるトピック: meta_queryのvalue値に渡す引数についてkjmtshさん
ありがとうございます。
勉強になります。やはりカスタムタクソノミーはユーザーの範囲外なんですね。
頂いたソースを実行したものが以下になります。
Array ( [join] => INNER JOIN xxx_usermeta ON (xxx_users.ID = xxx_usermeta.user_id) INNER JOIN xxx_usermeta AS mt1 ON (xxx_users.ID = mt1.user_id) [where] => AND ( (xxx_usermeta.meta_key = 'genre' AND CAST(xxx_usermeta.meta_value AS CHAR) LIKE '%men%') OR (mt1.meta_key = 'genre' AND CAST(mt1.meta_value AS CHAR) LIKE '%cafe%') ) )
返信が遅くなってしまい申し訳ございません。
宜しくお願い致します。フォーラム: 使い方全般
返信が含まれるトピック: meta_queryのvalue値に渡す引数についてToro_Unitさん
返信が遅くなってしまってしまい申し訳ございません。貴重なアドバイスありがとうございます。
やってみますご報告致します。
フォーラム: 使い方全般
返信が含まれるトピック: meta_queryのvalue値に渡す引数について説明が足りず申し訳ございません。
上の例は、
カスタムフィールドが配列ではなく、
複数の検索候補もマッチさせることのできている記述を
仮にLIKE検索にした場合を試してみました。結果ヒットしなくなったため、
LIKE検索でのvalue値にarrayが使えないと推測できました。求めているのは
カスタムフィールドが配列で、検索候補も複数でマッチさせることです。上記の推測からLIKE検索ではvalue値に$arr_gnr[0]のように
ひとつひとつの検索要素をあてがう必要があると考えましたが、
検索結果を吐き出すのに時間がかかりすぎてしまうことが問題です。サーバーのスペックが問題となるでしょうか。
もし記述的に回避できるのであればご教授頂きたいです。どうか宜しくお願い致します。
フォーラム: 使い方全般
返信が含まれるトピック: meta_queryのvalue値に渡す引数についてgogowebさん、ありがとうございます。
仰る通り試してみましたが、ヒットしませんでした。
下記の、ラジオボタン項目の既にヒットしている条件で、
INをLIKEにかえて試してみましたが、ヒットしなくなりました。
(INだとヒットします。)$keywd = array('tokyo','kanagawa'); $args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'area', 'value' => $keywd , 'compare' => 'IN' ) ) );
value値をarrayで指定した場合、LIKEでの検索がヒットしなくなりました。
フォーラム: 使い方全般
返信が含まれるトピック: meta_queryのvalue値に渡す引数についてareaというkeyはラジオボタンで追加された項目であったのためヒットしたのですが、
チェックボックスの項目(service)に対してはヒットしませんでした。チェックボックスの場合格納されているデータがラジオボタンとは違うことがわかりました。
array(2) { [0]=> string(18) "ショッピング" [1]=> string(12) "サービス" }
compareをLIKEにして検索するようにしました。
$args = array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'service', 'value' => $arr_gnr[0], 'compare' => 'LIKE' ), array( 'key' => 'service', 'value' => $arr_gnr[1], 'compare' => 'LIKE' ), array( 'key' => 'service', 'value' => $arr_gnr[2], 'compare' => 'LIKE' ) ) ); } $user_query = new WP_User_Query( $args );
しかし
サーバーからアクセス制限がかかってしまうほど検索時間がかかってしまい実用できません。チェックボックスは25項目程あり、現状2つのLIKE検索でいっぱいいっぱいです。
compare=>INで検索できる良い方法はありませんでしょうかフォーラム: 使い方全般
返信が含まれるトピック: meta_queryのvalue値に渡す引数についてありがとうございます。
できました!今tokyo,kanagawaにしているところも引数にしてできました。
先に進めそうです。$keywd = array($arr_chk[0],$arr_chk[1]);
出来ないときは下記のようにして悩んでいました。
$keywd = “array(‘” . $arr_chk[0] . “‘,'” . $arr_chk[1] . “‘)”;ありがとうございました。
フォーラム: 使い方全般
返信が含まれるトピック: チェックボックスの値受け渡し方法nobita様
有難うございます。
action属性の指定で出来ました!wordpressが使用しているname値以外での検索は、ここで指定するんですね。
大変勉強になりました。
有難うございました。フォーラム: 使い方全般
返信が含まれるトピック: チェックボックスの値受け渡し方法nobita様、ありがとうございます。
教授頂いた通りやってみましたが、検索するとトップページに戻ってしまいます。
<form method="GET"> <input type="checkbox" name="chk[]" value="sample1"> <input type="checkbox" name="chk[]" value="sample2"> <input type="submit" />
仮にこれを、下記の様にname=”s”にするとうまくいきます。
ただし複数チェックすると、後の値しか取り出すことができません<form method="GET"> <input type="checkbox" name="s" value="sample1"> <input type="checkbox" name="s" value="sample2"> <input type="submit" />
両方選択して取り出すと、sample2のみ。
name=”chk[]”などのオリジナルの値を使うとトップに飛ぶ意味がわかりません。
どこかで設定する必要があるのでしょうか申し訳ございませんが、宜しくお願い致します。