Durchsuchen der Haupttabelle
Einfach WP_User_Query
mit einem Suchargument verwenden.
Wenn Sie beispielsweise nach einem Benutzer mit einem Schlüsselwort in seinen user_email
oder ähnlichen Spalten in der {$wpdb->prefix}users
Tabelle suchen möchten, können Sie Folgendes tun:
$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();
Denken Sie daran, dass dies *
ein Platzhalter ist. Wenn Sie beispielsweise die user_email
Domain auf eine einzelne Domain beschränken, erhalten Sie die folgende Suchzeichenfolge : *@example.com
.
Die search
Zeichenfolge hat einige "magische" Funktionen: Die search_columns
Standardeinstellung ist ...
user_email
wenn @
im search
arg vorhanden ist.
user_login
und ID
wenn das search
Argument numerisch ist
user_url
wenn die search
Zeichenfolge http://
oder enthälthttps://
- oder ...
user_login
und user_nicename
wenn eine Zeichenfolge vorhanden ist.
Alle diese Standardeinstellungen werden nur festgelegt, wenn kein search_columns
Argument angegeben wurde.
Durchsuchen der Metatabelle
Wenn Sie beispielsweise nach first_name
oder suchen möchten last_name
, müssen Sie Folgendes tun, meta_query
da sie nicht Teil der Haupttabelle sind:
$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();
Stellen Sie sicher, dass Sie die richtige Suchzeichenfolge abrufen. Normalerweise wäre das so get_query_var('s');
, aber es könnte sein - abhängig von Ihrem Formular name/id
auch etwas anderes, das Sie $_GET['user_search']
beispielsweise mit abrufen möchten . Stellen Sie sicher, dass Sie es richtig entfernen und unerwünschte Leerzeichen am Anfang und Ende der Zeichenfolge entfernen.
Denken Sie daran , dass dies eine ist , array( array() )
da es der ist relation
Schlüssel. Wenn Sie nur einen einzelnen Schlüssel durchsuchen möchten, ist es möglicherweise einfacher, einfach Folgendes zu tun:
$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();
Letzte Abfrage
Das Ergebnis könnte ungefähr so aussehen:
$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
Ihre Vorlage oder (was am besten wäre) gut in ein benutzerdefiniertes Mini-Plugin eingewickelt, um beim Wechseln von Themen nicht an Funktionalität zu verlieren.display_name
ist eine Spalte inwp_users
. Zwei Fragen kommen in den Sinn. 1: Ist dies eine kürzlich vorgenommene Änderung des Datenbankschemas? 2: Kann es als Wert insearch_columns
anstelle der Metaabfrage verwendet werden?Dies half mir anstelle von Kaisers Antwort: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
Aber in dieser Lösung hat die
$wpdb->escape($usermeta_keys)
Funktion einen Fehler erzeugt, also habe ich einfach verwendet$usermeta_keys
.quelle