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

Pocket

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
例えばこんな感じ

$args = array(
  'search' => $searchkey,
  'search_columns' => array(
  'user_login', 'user_nicename',
  'user_email', 'user_url' ),
  'meta_query' => array(
    'relation' =>; 'OR',
    array('key' => 'description',
      'compare' => 'LIKE'),
      array(
        'key' => 'first_name',
        'compare' => 'LIKE'
     )
  ),
  'fields' => 'ids');

Tips

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

'search' => '*'.$searchkey.'*',

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

この投稿へのコメント

  1. tskmyd said on 2017年1月31日 at 10:57 PM

    はじめまして、メッセージ失礼いたします。
    現在、個人でwebサイトを制作しており、ユーザー登録機能を設置し終え、
    こちらの記事を参考にさせていただきながら、
    ユーザーの検索機能を作っている最中なのですが、
    上記、$args ~  ‘ids’); のコードは、どのファイルに書けば宜しいのでしょうか。
    恥ずかしながら素人のためわからず..ご教示いただけますと大変幸いです。
    何卒よろしくお願いいたします。

    • ykawato said on 2017年2月1日 at 8:02 AM

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

  2. tskmyd said on 2017年2月1日 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