サポート » 使い方全般 » 登録されたユーザー情報を絞り込み検索する方法

  • 解決済 carecafe

    (@carecafe)


    こんにちは、ワードプレスでマッチングサイトを構築したいと思っています。

    よくあるマッチングサイト(ヤフーパートナーズ等)のように、登録されたユーザーを地域や性別、年齢で絞り込み検索したいと考えています。

    ユーザー登録時の項目(地域、性別等)は自力で増やすことができました。
    その後、それらのメタ情報で絞り込み検索をする方法がわかりません。
    ワードプレスの検索機能を改造する必要があると思い、調べてみたところ

    「get_users() 関数の meta_query 属性、
    および wp_user_query」

    を使うと可能らしいです。
    しかしphpの記述の仕方がわかりません。
    どなたかご教授頂けませんでしょうか。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • 絞込み検索部分だけなら、
    http://codex.wordpress.org/Class_Reference/WP_User_Query#Custom_Field_Parameters
    の Multiple custom user fields handling を参考にすれば、そんなに難しくはないと思います。

    あとは、検索用のフォームで指定したユーザーメタ(地域、性別、年齢)を、何とか ‘meta_query’ の ‘value’ に指定できれば完成です。

    トピック投稿者 carecafe

    (@carecafe)

    pluto1234様

    ご返信ありがとうございます。
    上記のURLを参考にして作ってみますね。

    トピック投稿者 carecafe

    (@carecafe)

    再度質問です。

    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() でユーザーを抽出することはできないので注意が必要です。

    トピック投稿者 carecafe

    (@carecafe)

    pluto1234様

    ご返信ありがとうございます。
    上記のフォームの値の受け渡しのURLを参考にさせて頂きます。
    これから構築してみます。
    よい結果をご報告できればと思います。

    トピック投稿者 carecafe

    (@carecafe)

    色々試してみたのですが、うまく構築できません。

    絞り込み検索フォームを作ることとはできたのですが、そこで絞り込んだ内容が表示されません(ページが見つかりませんでした、と出ます)。うまく値が受け渡しされてないのが原因だとは思いますが・・・
    検索フォームと検索結果の繋ぎ方をもう少し教えていただけませんでしょうか。

    その状態では、wp_user_query() が実行されていないと思われます。

    >ページが見つかりませんでした、
    となるのは、以下の可能性が大です。
    1) form の action に指定した URL が間違っている。
    2) form 項目(フィールド)の name に指定した名前が良くない。
     => wp_includes/class.wp.php で定義されているクエリー変数を name に指定してはいけません。クエリー変数は、
      $public_query_vars = array()
      $private_query_vars = array()
    に登録されています。

    トピック投稿者 carecafe

    (@carecafe)

    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」になってしまいます。
    正しい記述の方法はどうすればよいでしょうか。

    トピック投稿者 carecafe

    (@carecafe)

    もうすこし勉強してみます。
    一旦終了しますね。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「登録されたユーザー情報を絞り込み検索する方法」には新たに返信することはできません。