Bir worpress kullanıcısını görünen ada veya bir kısmına göre nasıl arayabilirim?


13

Sağlanan arama ile ilgili her şeyi görüntüleyecek bir arama sayfası oluşturmam gerekiyor. yani commentsbunu içeren, events, posts, CPTve s usersBu isimde.

Sitedeki adı veya soyadı arama terimini içeren kullanıcıları nasıl arayabilirim?

Yanıtlar:


25

Ana tabloyu arama

Sadece WP_User_Querybir arama argümanıyla kullanın .

Bu nedenle, örneğin user_email, {$wpdb->prefix}userstablodaki kendi veya benzer sütunlarında bir anahtar kelimeye sahip bir kullanıcıyı aramak istiyorsanız , aşağıdakileri yapabilirsiniz:

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

*Bir joker karakter olduğunu unutmayın . Örneğin kısıtlayan Yani user_emailtek etki alanına size aşağıdaki arama dizesini verecekti: *@example.com.

searchDize bazı "sihirli" özelliklere sahiptir: search_columnsvarsayılan ...

  • user_emailarg @içinde varsa search.
  • user_loginve IDeğer searcharg sayısalsa
  • user_urleğer searchdize içeren http://veyahttps://
  • veya ... user_loginve user_nicenamebir dize varsa.

Eğer onca varsayılan sadece ayarlanır hiçbir search_columns argüman belirtildi.

Meta tabloda arama yapma

Örneğin first_nameveya ile arama last_nameyapmak istiyorsanız meta_query, ana tablonun bir parçası olmadıkları için bir a yapmanız gerekir :

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

Doğru arama dizesini aldığınızdan emin olun. Normalde bu olabilir get_query_var('s');, ancak - formunuza bağlı olarak, örneğin name/idkullanarak almak isteyebileceğiniz farklı bir şey de olabilir $_GET['user_search']. Düzgün bir şekilde esacpe ettiğinizden ve dizenin başından ve sonundan istenmeyen beyaz alanı çıkardığınızdan emin olun.

Anahtar array( array() )var gibi bu bir olduğunu unutmayın relation. Yalnızca tek bir anahtarın aranmasını istiyorsanız, aşağıdakilerle gitmek daha kolay olabilir:

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

Son sorgu

Sonuç olabilecek aşağıdakilere yakın bak:

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

Hangi dosyaya bu sorguyu eklemek istiyorum?
Naveen

@Naveen Best fit functions.php, şablonunuz veya (en iyi olurdu), temaları değiştirirken işlevselliği kaybetmemek için özel bir mini eklentiye güzelce sarılmış olacaktır.
kaiser

Kiaser Cevabınız için teşekkürler. lütfen bana bu kodu nasıl function.php ile bütünleştirebilirim
Naveen

3
@Naveen Burada kapsam dışı. Kod hakkında biraz bilgi edinmeniz veya bunu sizin için yapacak bir geliştirici bulmanız gerekir. Ve şu soruları okuyun .
kaiser

display_nameiçindeki bir sütundur wp_users. İki soru akla geliyor. 1: Bu veritabanı şemasında yeni bir değişiklik mi? 2: search_columnsMeta sorgu yerine bir değer olarak kullanılabilir mi?
henrywright

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.