問題描述
我需要建立一個搜尋頁面,顯示與提供的搜尋相關的任何內容。即含有它的 comments,events,posts,CPT 和具有該名稱的 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_login和ID如果searcharg 是數字 -
user_url如果search字串包含http://或https:// -
或者
user_login和user_nicename,如果存在字串。
只有在沒有指定 search_columns 引數的情況下,才會設定所有這些預設值。
搜尋元表
如果要搜尋例如 first_name 或 last_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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。