Làm cách nào tôi có thể tìm kiếm người dùng worpress bằng tên hiển thị hoặc một phần của nó?


13

Tôi cần tạo một trang tìm kiếm sẽ hiển thị mọi thứ liên quan đến tìm kiếm được cung cấp. tức là commentschứa nó, events, posts, CPTs và usersvới tên đó.

Làm cách nào tôi có thể tìm kiếm người dùng trong trang web tên hoặc họ chứa cụm từ tìm kiếm?

Câu trả lời:


24

Tìm kiếm bảng chính

Đơn giản chỉ cần sử dụng WP_User_Queryvới một đối số tìm kiếm.

Vì vậy, nếu bạn muốn tìm kiếm ví dụ cho một người dùng có từ khóa trong user_emailcác cột tương tự hoặc từ {$wpdb->prefix}usersbảng của mình, thì bạn có thể làm như sau:

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

Hãy nhớ rằng đó *là một ký tự đại diện. Vì vậy, việc hạn chế ví dụ đối user_emailvới một tên miền sẽ cung cấp cho bạn chuỗi tìm kiếm sau : *@example.com.

Các searchchuỗi có một số "ma thuật" các tính năng: Các search_columnsgiá trị mặc định để ...

  • user_emailnếu @có mặt trong searcharg.
  • user_loginIDnếu đối searchsố là số
  • user_urlnếu searchchuỗi chứa http://hoặchttps://
  • hoặc ... user_loginuser_nicenamenếu một chuỗi có mặt.

Tất cả các giá trị mặc định đó chỉ được đặt nếu không có search_columns đối số nào được chỉ định.

Tìm kiếm bảng meta

Nếu bạn muốn tìm kiếm bằng ví dụ first_namehoặc last_name, thì bạn sẽ phải thực hiện meta_queryvì chúng không phải là một phần của bảng chính:

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

Hãy chắc chắn rằng bạn lấy đúng chuỗi tìm kiếm. Thông thường đó sẽ là get_query_var('s');, nhưng nó có thể - tùy thuộc vào hình thức của bạn name/idcũng là một cái gì đó khác nhau mà bạn có thể muốn lấy bằng cách sử dụng $_GET['user_search']chẳng hạn. Hãy chắc chắn để esacpe đúng cách và loại bỏ khoảng trắng không mong muốn từ đầu và cuối chuỗi.

Hãy ghi nhớ rằng đây là một array( array() )khi có sự relationchủ chốt. Nếu bạn chỉ muốn có một khóa duy nhất được tìm kiếm, có thể dễ dàng hơn chỉ với cách sau:

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

Truy vấn cuối cùng

Kết quả có thể trông gần giống như sau:

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

Trong tập tin nào tôi muốn thêm truy vấn này?
Naveen

@Naveen Phù hợp nhất sẽ là functions.php, mẫu của bạn hoặc (sẽ là tốt nhất) được gói gọn trong một plugin nhỏ tùy chỉnh để không mất chức năng khi chuyển chủ đề.
kaiser

Kiaser cảm ơn bạn đã trả lời. vui lòng giúp tôi làm thế nào tôi có thể tích hợp mã này vào
hàm.php

3
@Naveen Đó là ngoài phạm vi ở đây. Bạn sẽ phải tìm hiểu một chút về mã hoặc tìm một nhà phát triển để làm điều đó cho bạn. Và đọc Q / A đó .
kaiser

display_namelà một cột trong wp_users. Hai câu hỏi đến với tâm trí. 1: Đây có phải là một thay đổi gần đây cho lược đồ cơ sở dữ liệu? 2: Nó có thể được sử dụng làm giá trị search_columnsthay cho truy vấn meta không?
henrywright

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.