WP-membersの追加したプロフィール内容を検索したい時
WP-membersで追加したフィールドからユーザー検索や絞り込みをするのにハマったお話。
会員制サイトなんかを作ったりしていたのですが、プロフィールに色々と項目を追加してWP-membersにて登録出来るようにした…という状態。
get_usersではダメ
<?php $users = get_users(); ?>
はユーザー情報を全て取得する関数で、引数に色々と追加すると絞込の条件等も指定出来る。例えば
<?php $users = get_users( array( 'search' => 'sample*', 'search_columns' => 'user_nicename' ); ?>
とユーザーニックネームで「sample」という単語から始まるものを検索出来る。だったらsearch_columnsにカスタムフィールドのフィールド名突っ込めばいいかと思いきや、取れない。CODEX見るとそもそも「('ID'、'user_login'、'user_email'、'user_url'、'user_nicename'のいずれか)」しか利用出来なかった。残念。
という訳で色々試行錯誤した結果以下になった。
<?php $users = get_users();//全てのユーザー情報を取得 foreach ($users as $key => $value) { $usermeta[] = $value->ID;//ユーザーIDを取得して配列に格納 } //ユーザー数を取得してループ(foreachでもいいのですが…) for($i=0;$i<count($usermeta);$i++){ $get = get_user_meta( $usermeta[$i],'検索したいフィールド',true); if($get == "サンプル"){ echo $get."がマッチしました"; echo $get."さんのスラッグは".get_the_author_meta('user_nicename',$usermeta[$i])."です!"; } } ?>
というような感じでキーワードに引っかかったユーザーを一覧で出せる。またget_the_author_metaはカスタムフィールドだろうが既存のフィールドだろうがお構いなしに取れるので、これを使えばほぼなんとでも表示が出来る。
#他にもっと良い方法
多分すごくありそう。なんていうか今回僕はやり方が分からず、力づくでやった感が凄い。もっとスマートな方法があれば教えてください…。