絞込み検索部分だけなら、
http://codex.wordpress.org/Class_Reference/WP_User_Query#Custom_Field_Parameters
の Multiple custom user fields handling を参考にすれば、そんなに難しくはないと思います。
あとは、検索用のフォームで指定したユーザーメタ(地域、性別、年齢)を、何とか ‘meta_query’ の ‘value’ に指定できれば完成です。
pluto1234様
ご返信ありがとうございます。
上記のURLを参考にして作ってみますね。
再度質問です。
wp_user_queryを使ってユーザー情報を表示することはできたのですが、
検索フォームで指定したユーザーメタをvalueに指定する方法が分かりません。
例えば、ユーザー登録時に登録された趣味(hobby:チェックボックスで「ゲーム□ 読書□」)の情報を、検索フォームに「趣味:ゲーム□ 読書□」と表示しチェックして検索するには検索フォームをどいう風にカスタマイズすればよいでしょうか。
検索フォーム は、WordPress の検索ボックスをカスタマイズするのではなく、自前の検索フォームを用意します。フォームで入力(選択)したユーザーメタの値を、wp_user_query() を記述したページに渡し、受け取った値を $value として設定します。「趣味」のように複数入力可能なチェックボックスがあるとちょっとだけ面倒です。
フォームの値の受け渡しは、こんな感じです(このサンプルはWordPressと無関係です)。
http://www.yukun.info/blog/2008/11/php-form-submit-action-post.html
また、ユーザーメタを追加するときにプラグインを使っていると、wp_usermeta テーブルではなく、独自のテーブルに値を保存するものもあります。そうなると、wp_user_query() でユーザーを抽出することはできないので注意が必要です。
pluto1234様
ご返信ありがとうございます。
上記のフォームの値の受け渡しのURLを参考にさせて頂きます。
これから構築してみます。
よい結果をご報告できればと思います。
色々試してみたのですが、うまく構築できません。
絞り込み検索フォームを作ることとはできたのですが、そこで絞り込んだ内容が表示されません(ページが見つかりませんでした、と出ます)。うまく値が受け渡しされてないのが原因だとは思いますが・・・
検索フォームと検索結果の繋ぎ方をもう少し教えていただけませんでしょうか。
その状態では、wp_user_query() が実行されていないと思われます。
>ページが見つかりませんでした、
となるのは、以下の可能性が大です。
1) form の action に指定した URL が間違っている。
2) form 項目(フィールド)の name に指定した名前が良くない。
=> wp_includes/class.wp.php で定義されているクエリー変数を name に指定してはいけません。クエリー変数は、
$public_query_vars = array()
$private_query_vars = array()
に登録されています。
pluto1234様
ご返信ありがとうございます。
URLやnameは大丈夫だと思うのですが・・・
どうしても「No users found. 」と出て表示されません。
php初心者で覚え覚えで作っているので、よろしければ見て頂けませんでしょうか。
①searchform.phpを作り、下記の内容を記述
<form action=”kekka” method=”get”>
性別:
<input type=”radio” name=”gender” value=”男性” checked />男性
<input type=”radio” name=”gender” value=”女性” />女性
趣味:
<input type=”checkbox” name=”hobby[0]” value=”1″ />ゲーム
<input type=”checkbox” name=”hobby[1]” value=”1″ />読書
<input type=”submit” value=”検索” />
</form>
②トップページに<?php get_search_form(); ?>を記述し、検索フォームを作る。
③固定ページ(page-kekka.php)を作成し、そこに以下を記述
<?php
if ($_SERVER[“REQUEST_METHOD”] == “GET”) {
$gender = $_GET[“gender”];
$hobby = $_GET[“hobby”];
}
$args = array(
‘orderby’ => ‘registered’,
‘order’ => ‘DESC’,
‘number’ => 10,
‘fields’ => ‘all_with_meta’
);
$args = array(
‘meta_query’ => array(
‘relation’ => ‘AND’,
array(
‘key’ => ‘gender’,
‘value’ => ‘$gender’,
),
array(
‘key’ => ‘hobby’,
‘value’ => ‘$hobby’,
),
)
);
$users = new WP_User_Query( $args );
if ( ! empty( $user_query->results ) ) {
foreach ( $user_query->results as $user ) {
echo ‘<p>’ . $user->display_name . ‘</p>’;
}
} else {
echo ‘No users found.’;
}
?>
という様に記述しています。
トップページの検索フォームで検索してもkekkaページには飛ぶのですが、「No users found」になってしまいます。
正しい記述の方法はどうすればよいでしょうか。