Come posso cercare un utente worpress per nome visualizzato o parte di esso?


13

Devo creare una pagina di ricerca che visualizzi tutto ciò che riguarda la ricerca fornita. cioè commentslo contiene, events, posts, CPTS e userscon tale nome.

Come posso cercare utenti nel sito che contengono il nome o il cognome della frase di ricerca?

Risposte:


24

Ricerca nella tabella principale

Basta usare WP_User_Querycon un argomento di ricerca.

Quindi, se vuoi cercare un utente con una parola chiave nelle sue user_emailcolonne o simili dalla {$wpdb->prefix}userstabella, puoi fare quanto segue:

$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();

Tieni presente che *è un carattere jolly. Così, limitando ad esempio, la user_emaila un singolo dominio darebbe la seguente stringa di ricerca: *@example.com.

La searchstringa ha alcune caratteristiche "magiche": l' search_columnsimpostazione predefinita è ...

  • user_emailse @è presente searchnell'arg.
  • user_logine IDse l' searcharg è numerico
  • user_urlse la searchstringa contiene http://ohttps://
  • oppure ... user_logine user_nicenamese è presente una stringa.

Tutti questi valori predefiniti vengono impostati solo se non è search_columns stato specificato alcun argomento.

Ricerca nella tabella meta

Se vuoi cercare per esempio first_nameo last_name, allora dovrai fare un meta_querydato che non fanno parte della tabella principale:

$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();

Assicurati di recuperare la stringa di ricerca corretta. Normalmente sarebbe get_query_var('s');, ma potrebbe - a seconda del tuo modulo name/idessere anche qualcosa di diverso che potresti voler recuperare usando $_GET['user_search']ad esempio. Assicurati di farlo correttamente e rimuovere lo spazio bianco indesiderato dall'inizio e dalla fine della stringa.

Tieni presente che questo è un in array( array() )quanto c'è la relationchiave. Se si desidera solo cercare una chiave singola, potrebbe essere più semplice eseguire le seguenti operazioni:

$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();

Query finale

Il risultato potrebbe essere simile al seguente:

$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();

In quale file voglio aggiungere questa query?
Naveen,

@Naveen La soluzione migliore sarebbe il functions.phptuo modello o (che sarebbe la cosa migliore) racchiuso in un mini plug-in personalizzato per non perdere funzionalità quando cambi tema.
Kaiser

Kiaser grazie per la tua risposta. per favore aiutatemi come posso integrare questo codice in
Functions.php

3
@Naveen È fuori portata qui. Dovrai imparare qualcosa sul codice o trovare uno sviluppatore che lo faccia per te. E letto che Q / A .
Kaiser

display_nameè una colonna in wp_users. Mi vengono in mente due domande. 1: si tratta di una recente modifica allo schema del database? 2: può essere utilizzato come valore search_columnsanziché come meta query?
henrywright,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.