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/