Sağlanan arama ile ilgili her şeyi görüntüleyecek bir arama sayfası oluşturmam gerekiyor. yani comments
bunu içeren, events
, posts
, CPT
ve s users
Bu 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 comments
bunu içeren, events
, posts
, CPT
ve s users
Bu isimde.
Sitedeki adı veya soyadı arama terimini içeren kullanıcıları nasıl arayabilirim?
Yanıtlar:
Sadece WP_User_Query
bir arama argümanıyla kullanın .
Bu nedenle, örneğin user_email
, {$wpdb->prefix}users
tablodaki 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_email
tek etki alanına size aşağıdaki arama dizesini verecekti: *@example.com
.
search
Dize bazı "sihirli" özelliklere sahiptir: search_columns
varsayılan ...
user_email
arg @
içinde varsa search
.user_login
ve ID
eğer search
arg sayısalsauser_url
eğer search
dize içeren http://
veyahttps://
user_login
ve user_nicename
bir dize varsa.Eğer onca varsayılan sadece ayarlanır hiçbir search_columns
argüman belirtildi.
Örneğin first_name
veya ile arama last_name
yapmak 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/id
kullanarak 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_name
içindeki bir sütundur wp_users
. İki soru akla geliyor. 1: Bu veritabanı şemasında yeni bir değişiklik mi? 2: search_columns
Meta 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
.