mypglog

プログラミングやデザインの事をメモ等かねながら

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はカスタムフィールドだろうが既存のフィールドだろうがお構いなしに取れるので、これを使えばほぼなんとでも表示が出来る。


#他にもっと良い方法
多分すごくありそう。なんていうか今回僕はやり方が分からず、力づくでやった感が凄い。もっとスマートな方法があれば教えてください…。