Jak mogę wyszukać trudniejszego użytkownika według wyświetlanej nazwy lub jej części?

13

Muszę utworzyć stronę wyszukiwania, która wyświetli wszystko związane z podanym wyszukiwaniem. czyli commentszawierające go events, posts, CPTy i usersz tą nazwą.

Jak mogę wyszukać w witrynie użytkowników, których imię lub nazwisko zawiera wyszukiwane hasło?

hannit cohen
źródło

Odpowiedzi:

24

Przeszukiwanie głównego stołu

Po prostu użyj WP_User_Queryz argumentem wyszukiwania.

Jeśli więc chcesz na przykład wyszukać użytkownika ze słowem kluczowym w jego user_emaillub podobnych kolumnach z {$wpdb->prefix}userstabeli, 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_emaildo jednej domeny nie daje następujący łańcuch wyszukiwania: *@example.com.

searchCiąg ma pewne cechy „magicznych” wybrać: search_columnsDomyślnie do ...

  • user_emailjeśli @jest obecny w searcharg.
  • user_logina IDjeśli searcharg jest liczbą
  • user_urljeśli searchciąg zawiera http://lubhttps://
  • lub ... user_logina user_nicenamejeś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_namelub last_name, musisz zrobić, meta_queryponieważ 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 relationklucz. 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();
kajzer
źródło
W jakim pliku chcę dodać to zapytanie?
Naveen
@Naveen Najlepsze dopasowanie to albo functions.phpszablon, albo (co byłoby najlepsze) ładnie opakowane w niestandardową mini-wtyczkę, aby nie stracić funkcjonalności podczas przełączania motywów.
kaiser
Dziękuję Kiaser za odpowiedź. pomóżcie mi, jak mogę zintegrować ten kod z funkcjami.
php
3
@Naveen Nie ma tu zastosowania. Musisz dowiedzieć się trochę o kodzie lub znaleźć programistę, który zrobi to za Ciebie. I przeczytaj to pytanie / odpowiedź .
kaiser
display_namejest kolumną w wp_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ści search_columnszamiast meta kwerendy?
henrywright