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?
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:
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ısalsauser_urleğer searchdize içeren http://veyahttps://user_loginve user_nicenamebir dize varsa.Eğer onca varsayılan sadece ayarlanır hiçbir search_columns argüman belirtildi.
Ö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();
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();
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.
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?
Bu, kaiser cevabı yerine bana yardımcı oldu: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
Ama bu çözüm $wpdb->escape($usermeta_keys)işlevinde bir hata üretti, bu yüzden sadece kullandım $usermeta_keys.