Ich muss eine Suchseite erstellen, auf der alle Informationen zur angegebenen Suche angezeigt werden. d.h. comments
mit diesem Namen, events
, posts
, CPT
s und users
.
Wie kann ich auf der Site nach Benutzern suchen, deren Vor- oder Nachname den Suchbegriff enthält?
Verwenden Sie einfach WP_User_Query
mit einem Suchargument.
Wenn Sie beispielsweise nach einem Benutzer mit einem Schlüsselwort in seinem user_email
oder ähnlichen Spalten aus 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 *
ein Platzhalter ist. Wenn Sie beispielsweise den user_email
auf eine einzelne Domain beschränken, erhalten Sie den folgenden Suchbegriff: *@example.com
.
Die Zeichenfolge search
verfügt über einige "magische" Funktionen: Der search_columns
ist standardmäßig ...
user_email
wenn @
in dem Argument search
vorhanden ist.user_login
und ID
, wenn das Argument search
numerisch istuser_url
wenn die Zeichenfolge search
http://
oder https://
enthältuser_login
und user_nicename
, wenn eine Zeichenfolge vorhanden ist.Alle diese Standardeinstellungen werden nur festgelegt, wenn das Argument no search_columns
angegeben wurde.
Wenn Sie beispielsweise nach first_name
oder last_name
suchen möchten, müssen Sie einen meta_query
eingeben, da diese 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 eine get_query_var('s');
, aber es könnte - abhängig von Ihrem Formular name/id
auch etwas anderes sein, das Sie möglicherweise mit $_GET['user_search']
abrufen möchten. Vergewissern Sie sich, dass die Zeichenfolge ordnungsgemäß esacpe ist, und entfernen Sie unerwünschte Leerzeichen am Anfang und am Ende der Zeichenfolge.
Denken Sie daran, dass dies eine array( array() )
ist, da es den relation
-Schlüssel gibt. Wenn Sie nur einen einzelnen Schlüssel durchsuchen lassen möchten, ist es möglicherweise einfacher, die folgenden Schritte auszuführen:
$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();
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();
Dies hat mir geholfen, anstatt Kaisers Antwort: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
Aber in dieser Lösung hat die Funktion $wpdb->escape($usermeta_keys)
einen Fehler generiert, deshalb habe ich einfach $usermeta_keys
verwendet.