Bagaimana saya bisa mencari pengguna worpress dengan nama tampilan atau bagian dari itu?

13

Saya perlu membuat halaman pencarian yang akan menampilkan apa pun yang terkait dengan pencarian yang disediakan. yaitu commentsberisi itu, events, posts, CPTs dan usersdengan nama itu.

Bagaimana saya bisa mencari pengguna di situs yang nama depannya atau belakang mengandung frasa pencarian?

hannit cohen
sumber

Jawaban:

24

Mencari di tabel utama

Cukup gunakan WP_User_Querydengan argumen pencarian.

Jadi, jika Anda ingin mencari contoh untuk pengguna dengan kata kunci di user_emailkolomnya atau yang serupa dari {$wpdb->prefix}userstabel, maka Anda dapat melakukan hal berikut:

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

Perlu diingat bahwa itu *adalah wildcard. Jadi membatasi misalnya user_emailuntuk satu domain akan memberikan pencarian string berikut: *@example.com.

The searchString memiliki beberapa "keajaiban" fitur: The search_columnsdefault untuk ...

  • user_emailjika @ada dalam searchargumen.
  • user_logindan IDjika searcharg adalah numerik
  • user_urljika searchstring berisi http://atauhttps://
  • atau ... user_logindan user_nicenamejika sebuah string ada.

Semua default itu hanya diatur jika tidak ada search_columns argumen yang ditentukan.

Mencari tabel meta

Jika Anda ingin mencari dengan contoh first_nameatau last_name, maka Anda harus melakukan meta_querykarena mereka bukan bagian dari tabel utama:

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

Pastikan Anda mengambil string pencarian yang tepat. Biasanya itu akan terjadi get_query_var('s');, tetapi bisa - tergantung pada formulir Anda name/idjuga menjadi sesuatu yang berbeda yang mungkin ingin Anda ambil menggunakan $_GET['user_search']misalnya. Pastikan untuk menghapusnya dengan benar dan menghapus ruang putih yang tidak diinginkan dari awal dan akhir string.

Perlu diingat bahwa ini adalah array( array() )karena ada relationkuncinya. Jika Anda hanya ingin memiliki satu kunci dicari, mungkin lebih mudah untuk hanya pergi dengan yang berikut ini:

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

Permintaan terakhir

Hasilnya mungkin terlihat dekat dengan yang berikut:

$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();
kaisar
sumber
Di file mana saya ingin menambahkan pertanyaan ini?
Naveen
@Naveen Paling cocok akan menjadi functions.php, template Anda atau (yang akan terbaik) terbungkus dengan baik dalam mini-plugin khusus untuk tidak kehilangan fungsionalitas saat beralih tema.
kaiser
Kiaser terima kasih atas balasan Anda. tolong bantu saya bagaimana saya bisa mengintegrasikan kode ini ke functions.php
Naveen
3
@Naveen Itu di luar jangkauan di sini. Anda harus belajar sedikit tentang kode atau mencari pengembang untuk melakukannya untuk Anda. Dan baca Q / A itu .
kaiser
display_nameadalah kolom dalam wp_users. Dua pertanyaan muncul di benak saya. 1: Apakah ini perubahan terbaru ke skema database? 2: Bisakah itu digunakan sebagai nilai search_columnsalih-alih meta query?
henrywright