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
例えばこんな感じ
$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/
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント
はじめまして、メッセージ失礼いたします。
現在、個人でwebサイトを制作しており、ユーザー登録機能を設置し終え、
こちらの記事を参考にさせていただきながら、
ユーザーの検索機能を作っている最中なのですが、
上記、$args ~ ‘ids’); のコードは、どのファイルに書けば宜しいのでしょうか。
恥ずかしながら素人のためわからず..ご教示いただけますと大変幸いです。
何卒よろしくお願いいたします。
$args は、
$user_query = new WP_User_Query( $args );
で使うので、テーマの中で検索時にWP_User_Query()を使う前に入れてください。
お忙しい中ご丁寧にありがとうございます。
検索フォームに、
を入れ、
検索結果ページに、
$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が出力されてしまうのですが、
こちら原因はわかりますでしょうか..?(無知ですみません)
もしわかりましたら、アドバイスを頂けますと大変幸いです。
https://generatewp.com/wp_user_query/
で、Searchを試してみてください。
有償でWordPressカスタマイズも承っておりますので、ご希望でしたらこちらからご相談ください: https://glocalism.co.jp/contactus/