Przeszukiwanie głównego stołu
Po prostu użyj WP_User_Query
z argumentem wyszukiwania.
Jeśli więc chcesz na przykład wyszukać użytkownika ze słowem kluczowym w jego user_email
lub podobnych kolumnach z {$wpdb->prefix}users
tabeli, możesz wykonać następujące czynności:
$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();
Pamiętaj, że *
jest to symbol wieloznaczny. Więc ograniczając na przykład user_email
do jednej domeny nie daje następujący łańcuch wyszukiwania: *@example.com
.
search
Ciąg ma pewne cechy „magicznych” wybrać: search_columns
Domyślnie do ...
user_email
jeśli @
jest obecny w search
arg.
user_login
a ID
jeśli search
arg jest liczbą
user_url
jeśli search
ciąg zawiera http://
lubhttps://
- lub ...
user_login
a user_nicename
jeśli łańcuch jest obecny.
Wszystkie te wartości domyślne są ustawione tylko wtedy, gdy nie search_columns
podano argumentu.
Przeszukiwanie meta tabeli
Jeśli chcesz wyszukać na przykład first_name
lub last_name
, musisz zrobić, meta_query
ponieważ nie są one częścią głównej tabeli:
$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();
Upewnij się, że odzyskałeś odpowiedni ciąg wyszukiwania. Zwykle tak get_query_var('s');
, ale może być - w zależności od formy name/id
, może być też coś innego, co możesz chcieć odzyskać, $_GET['user_search']
na przykład. Upewnij się, że poprawnie go zaszyfrujesz i usuniesz niechciane białe znaki z początku i końca łańcucha.
Należy pamiętać, że jest to array( array() )
jak tam jest relation
klucz. Jeśli chcesz po prostu przeszukać pojedynczy klucz, może być łatwiej wykonać następujące czynności:
$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();
Ostatnie zapytanie
Wynik może wyglądać podobnie do następującego:
$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
szablon, albo (co byłoby najlepsze) ładnie opakowane w niestandardową mini-wtyczkę, aby nie stracić funkcjonalności podczas przełączania motywów.display_name
jest kolumną wwp_users
. Przychodzą mi na myśl dwa pytania. 1: Czy to ostatnia zmiana schematu bazy danych? 2: Czy można go użyć jako wartościsearch_columns
zamiast meta kwerendy?Pomogło mi to zamiast odpowiedzi Kaiser: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
Ale w tym rozwiązaniu
$wpdb->escape($usermeta_keys)
funkcja wygenerowała błąd, więc po prostu użyłem$usermeta_keys
.źródło