Wie kann ich nach einem Worpress-Benutzer anhand des Anzeigenamens oder eines Teils davon suchen?

13

Ich muss eine Suchseite erstellen, auf der alles angezeigt wird, was mit der angegebenen Suche zusammenhängt. dh commentses enthält, events, posts, CPTs und usersmit diesem Namen.

Wie kann ich auf der Website nach Benutzern suchen, deren Vor- oder Nachname den Suchbegriff enthält?

hannit cohen
quelle

Antworten:

24

Durchsuchen der Haupttabelle

Einfach WP_User_Querymit einem Suchargument verwenden.

Wenn Sie beispielsweise nach einem Benutzer mit einem Schlüsselwort in seinen user_emailoder ähnlichen Spalten in der {$wpdb->prefix}usersTabelle 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_emailDomain auf eine einzelne Domain beschränken, erhalten Sie die folgende Suchzeichenfolge : *@example.com.

Die searchZeichenfolge hat einige "magische" Funktionen: Die search_columnsStandardeinstellung ist ...

  • user_emailwenn @im searcharg vorhanden ist.
  • user_loginund IDwenn das searchArgument numerisch ist
  • user_urlwenn die searchZeichenfolge http://oder enthälthttps://
  • oder ... user_loginund user_nicenamewenn 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_nameoder suchen möchten last_name, müssen Sie Folgendes tun, meta_queryda 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/idauch 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 relationSchlü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();
Kaiser
quelle
In welcher Datei möchte ich diese Abfrage hinzufügen?
Naveen
@Naveen Am besten passt entweder functions.phpIhre 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.
Kaiser
Kiaser danke für deine Antwort. Bitte helfen Sie mir, wie ich diesen Code in functions.php integrieren kann
Naveen
3
@Naveen Das ist hier nicht möglich. Sie müssen etwas über Code lernen oder einen Entwickler finden, der das für Sie erledigt. Und dass Q / A gelesen .
Kaiser
display_nameist eine Spalte in wp_users. Zwei Fragen kommen in den Sinn. 1: Ist dies eine kürzlich vorgenommene Änderung des Datenbankschemas? 2: Kann es als Wert in search_columnsanstelle der Metaabfrage verwendet werden?
Henrywright