WordPressでWP_User_Queryを使ってuser検索する


WordPress 3.5からWP_User_Queryでmeta_queryが使えるようになった。

これを使うと、ようやく用意にdescriptionやfirst_nameなどuser metaから検索できるようになった。

ハマりどころ

  • user_loginやnicenameの検索と、meta_queryでのmeta_valueで検索するのは別。
  • user_loginやnicenameは、search_columnsで指定し、検索ワードは search に入れる
  • meta_key / meta_valueは、meta_queryを使う
  • search と meta_queryを両方使う場合は、meta_queryのvalueを入れずにsearchに入れたものが使われる
  • meta_key / meta_value のみ使う場合は、valueを指定する

User情報の、どれがmetaでどれがsearch_columnsに入れるかを知っておく必要がある。search_columnsに入れるのは、id, user_login, user_nicename, user_email, user_url
例えばこんな感じ

Tips

codexを見るとわかるが、emailはフィルタが入っていて、@の前まで一致しないとhitしない。そこで、searchにワイルドカードを入れておくと便利。

Codexからリンクが貼られているのでこれを使うとわかりやすい:

http://generatewp.com/wp_user_query/

この投稿へのコメント

  1. tskmyd said on 1月 31, 2017 at 10:57 pm

    はじめまして、メッセージ失礼いたします。

    現在、個人でwebサイトを制作しており、ユーザー登録機能を設置し終え、
    こちらの記事を参考にさせていただきながら、
    ユーザーの検索機能を作っている最中なのですが、
    上記、$args ~  ‘ids’); のコードは、どのファイルに書けば宜しいのでしょうか。

    恥ずかしながら素人のためわからず..ご教示いただけますと大変幸いです。

    何卒よろしくお願いいたします。

    • ykawato said on 2月 1, 2017 at 8:02 am

      $args は、
      $user_query = new WP_User_Query( $args );
      で使うので、テーマの中で検索時にWP_User_Query()を使う前に入れてください。

  2. tskmyd said on 2月 1, 2017 at 9:22 pm

    お忙しい中ご丁寧にありがとうございます。

    検索フォームに、

    を入れ、

    検索結果ページに、
    $searchkey,
    ‘search_columns’ => array(
    ‘user_login’ )
    );
    $user_query = new WP_User_Query( $args );

    // User Loop
    if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) {
    echo ” . $user->display_name . ”;
    }
    } else {
    echo ‘No users found.’;
    }
    ?>
    と入れた場合、

    登録済みのユーザー全員のdisplay_nameが出力されてしまうのですが、
    こちら原因はわかりますでしょうか..?(無知ですみません)

    もしわかりましたら、アドバイスを頂けますと大変幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL