問題描述

我需要建立一個搜尋頁面,顯示與提供的搜尋相關的任何內容。即含有它的 commentseventspostsCPT 和具有該名稱的 users

How can I search for users in the site who’s first or last name contains the search phrase ?

最佳解決方案

搜尋主表

只需使用 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 字串具有一些”magic” 功能:search_columns 預設為…

  • user_email 如果 @存在於 search 引數中。

  • user_loginID 如果 search arg 是數字

  • user_url 如果 search 字串包含 http://https://

  • 或者 user_loginuser_nicename,如果存在字串。

只有在沒有指定 search_columns 引數的情況下,才會設定所有這些預設值。

搜尋元表

如果要搜尋例如 first_namelast_name,那麼您將不得不做一個 meta_query,因為它們不是主表的一部分:

$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();

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。