Як я можу шукати користувача Wordpress за відображуваним іменем або його частиною?


13

Мені потрібно створити пошукову сторінку, яка відображатиме все, що стосується наданого пошуку. тобто commentsмістить його, events, posts, CPTS і usersз цим ім'ям.

Як я можу шукати користувачів на сайті, ім’я чи прізвище яких містить пошукову фразу?

Відповіді:


24

Пошук головної таблиці

Просто використовуйте WP_User_Queryз аргументом пошуку.

Тож якщо ви хочете шукати, наприклад, користувача з ключовим словом у своїх user_emailчи подібних стовпцях із {$wpdb->prefix}usersтаблиці, ви можете зробити наступне:

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

Майте на увазі, що *це підстановка. Так обмеження, наприклад, user_emailдля одного домену дасть вам наступний рядок для пошуку: *@example.com.

searchРядок має деякі «магічні» особливості: search_columnsзначення по замовчуванням ...

  • user_emailякщо @присутній у searchарг.
  • user_loginі IDякщо searchаргумент числовий
  • user_urlякщо searchрядок містить http://абоhttps://
  • або ... user_loginі user_nicenameякщо рядок присутній.

Усі ці параметри за замовчуванням встановлюються лише в тому випадку, якщо не search_columns вказано жодного аргументу.

Пошук мета-таблиці

Якщо ви хочете здійснити пошук, наприклад, first_nameабо last_nameвам доведеться зробити це, meta_queryоскільки вони не є частиною основної таблиці:

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

Переконайтеся, що ви отримали потрібний рядок пошуку. Як правило, це було б get_query_var('s');, але це може бути - залежно від вашої форми name/idтакож може бути щось інше, що ви можете отримати, наприклад, використовуючи $_GET['user_search']. Переконайтеся, що належним чином очистити його та видалити небажаний пробіл із початку та кінця рядка.

Майте на увазі, що це ключ, array( array() )оскільки тут є relationключ. Якщо ви просто хочете здійснити пошук одного ключа, можливо, буде простіше просто перейти з наступним:

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

Остаточний запит

Результат може бути близьким до наступного:

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

У який файл я хочу додати цей запит?
Naveen

@Naveen Найкраще підійде або functions.phpваш шаблон, або (що було б найкраще), добре загорнутий у спеціальний міні-плагін, щоб не втратити функціональність при переключенні тем.
кайзер

Kiaser дякую за вашу відповідь. будь ласка, допоможіть мені, як я можу інтегрувати цей код до function.php
Naveen

3
@Naveen Це поза сферою. Вам доведеться трохи дізнатися про код або знайти розробника, який зробить це за вас. І прочитав , що Q / A .
кайзер

display_name- це стовпчик у wp_users. На думку приходять два питання. 1: Це нещодавня зміна схеми бази даних? 2: Чи можна використовувати його як значення в search_columnsзамість мета-запиту?
henrywright

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.