回答:
単にWP_User_Query検索引数を指定して使用します。
したがって、たとえばuser_email、{$wpdb->prefix}usersテーブルの彼または類似の列にキーワードがあるユーザーを検索する場合は、次のように実行できます。
$users = new WP_User_Query( array(
'search' => '*'.esc_attr( $your_search_string ).'*',
'search_columns' => array(
'user_login',
'user_nicename',
'user_email',
'user_url',
),
) );
$users_found = $users->get_results();
これ*はワイルドカードです。したがって、たとえばuser_emailを単一のドメインに制限すると、次の検索文字列が得られます*@example.com。
search文字列には、いくつかの「魔法」の機能を備えています。search_columnsデフォルトは...
user_emailargに@存在する場合search。user_loginそして、IDあればsearch引数が数値でありますuser_urlもしsearch文字列が含まれていますhttp://かhttps://user_loginおよびuser_nicename文字列が存在する場合。これらのデフォルトはすべて、 search_columns引数が指定されていない場合にのみ設定されます。
たとえばfirst_nameまたはlast_nameで検索する場合meta_queryは、メインテーブルの一部ではないため、aを実行する必要があります。
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_string,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_string,
'compare' => 'LIKE'
)
)
) );
$users_found = $users->get_results();
正しい検索文字列を取得してください。通常はですがget_query_var('s');、フォームによっては、たとえば、name/id使用$_GET['user_search']して取得したい何かが異なる場合もあります。文字列を適切に食い止め、文字列の最初と最後から不要な空白を削除してください。
これはキーがあるarray( array() )ので注意してくださいrelation。単一のキーを検索するだけの場合は、次のようにすると簡単です。
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'meta_key' => 'first_name',
'meta_value' => $search_string,
'meta_compare' => 'LIKE',
) );
$users_found = $users->get_results();
結果は、可能性が次のように近くを見て:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'search' => "*{$search_string}*",
'search_columns' => array(
'user_login',
'user_nicename',
'user_email',
'user_url',
),
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_string,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_string,
'compare' => 'LIKE'
)
)
) );
$users_found = $users->get_results();
functions.phpテンプレート、またはテーマの切り替え時に機能を失わないようにカスタムミニプラグインにうまくまとめられた(これが最適です)のいずれかです。
display_nameはの列ですwp_users。2つの質問が思い浮かびます。1:これはデータベーススキーマに対する最近の変更ですか?2:メタクエリのsearch_columns代わりに値として使用できますか?
これはカイザーの答えの代わりに私を助けました:https : //laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
しかし、このソリューションでは$wpdb->escape($usermeta_keys)関数がエラーを生成したため、単にを使用しました$usermeta_keys。