表示名またはその一部でworpressユーザーを検索するにはどうすればよいですか?


13

提供された検索に関連するすべてのものを表示する検索ページを作成する必要があります。すなわちcommentsそれを含む、eventspostsCPTとS usersその名前を持ちます。

サイト内の姓または名に検索フレーズが含まれているユーザーを検索するにはどうすればよいですか?

回答:


24

メインテーブルの検索

単に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();

どのファイルにこのクエリを追加しますか?
Naveen 2014年

@Naveen最適なのは、、functions.phpテンプレート、またはテーマの切り替え時に機能を失わないようにカスタムミニプラグインにうまくまとめられた(これが最適です)のいずれかです。
カイザー2014年

キアザー、返信ありがとうございます。このコードをfunctions.phpに統合する方法を教えてください
Naveen

3
@Naveenそれはここでは範囲外です。コードについて少し学ぶか、それを行う開発者を見つける必要があります。そして、そのQ / Aを読んでください
カイザー2014年

display_nameはの列ですwp_users。2つの質問が思い浮かびます。1:これはデータベーススキーマに対する最近の変更ですか?2:メタクエリのsearch_columns代わりに値として使用できますか?
henrywright 2017

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.