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/