Mencari di tabel utama
Cukup gunakan WP_User_Query
dengan argumen pencarian.
Jadi, jika Anda ingin mencari contoh untuk pengguna dengan kata kunci di user_email
kolomnya atau yang serupa dari {$wpdb->prefix}users
tabel, maka Anda dapat melakukan hal berikut:
$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();
Perlu diingat bahwa itu *
adalah wildcard. Jadi membatasi misalnya user_email
untuk satu domain akan memberikan pencarian string berikut: *@example.com
.
The search
String memiliki beberapa "keajaiban" fitur: The search_columns
default untuk ...
user_email
jika @
ada dalam search
argumen.
user_login
dan ID
jika search
arg adalah numerik
user_url
jika search
string berisi http://
atauhttps://
- atau ...
user_login
dan user_nicename
jika sebuah string ada.
Semua default itu hanya diatur jika tidak ada search_columns
argumen yang ditentukan.
Mencari tabel meta
Jika Anda ingin mencari dengan contoh first_name
atau last_name
, maka Anda harus melakukan meta_query
karena mereka bukan bagian dari tabel utama:
$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();
Pastikan Anda mengambil string pencarian yang tepat. Biasanya itu akan terjadi get_query_var('s');
, tetapi bisa - tergantung pada formulir Anda name/id
juga menjadi sesuatu yang berbeda yang mungkin ingin Anda ambil menggunakan $_GET['user_search']
misalnya. Pastikan untuk menghapusnya dengan benar dan menghapus ruang putih yang tidak diinginkan dari awal dan akhir string.
Perlu diingat bahwa ini adalah array( array() )
karena ada relation
kuncinya. Jika Anda hanya ingin memiliki satu kunci dicari, mungkin lebih mudah untuk hanya pergi dengan yang berikut ini:
$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();
Permintaan terakhir
Hasilnya mungkin terlihat dekat dengan yang berikut:
$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
, template Anda atau (yang akan terbaik) terbungkus dengan baik dalam mini-plugin khusus untuk tidak kehilangan fungsionalitas saat beralih tema.display_name
adalah kolom dalamwp_users
. Dua pertanyaan muncul di benak saya. 1: Apakah ini perubahan terbaru ke skema database? 2: Bisakah itu digunakan sebagai nilaisearch_columns
alih-alih meta query?Ini membantu saya alih-alih jawaban kaiser: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
Tetapi dalam
$wpdb->escape($usermeta_keys)
fungsi solusi ini menghasilkan kesalahan, jadi saya hanya digunakan$usermeta_keys
.sumber