提供された検索に関連するものをすべて表示する検索ページを作成する必要があります。すなわち、それを含むcomments
、events
、posts
、CPT
s、およびusers
、その名前です。
サイト内で姓または名に検索フレーズが含まれているユーザーを検索するにはどうすればよいですか。
検索引数を付けて WP_User_Query
を使用するだけです。
たとえば、user_email
または{$wpdb->prefix}users
テーブルの類似の列にキーワードを含むユーザーを検索する場合は、次のようにします。
$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();
*
はワイルドカードです。したがって、たとえばuser_email
を単一のドメインに制限すると、検索文字列は*@example.com
になります。
search
文字列には、いくつかの「マジック」機能があります。search_columns
のデフォルトは...です。
user_email
がsearch
引数に存在する場合は@
。ID
引数が数値の場合はuser_login
およびsearch
search
ストリングにuser_url
またはhttp://
が含まれている場合はhttps://
user_login
およびuser_nicename
。これらすべてのデフォルトは、nosearch_columns
引数が指定されている場合にのみ設定されます。
例えばfirst_name
やlast_name
で検索したい場合、それらはメインテーブルの一部ではないのでmeta_query
をする必要があります。
$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();
正しい検索文字列を必ず取得してください。通常それはget_query_var('s');
ですが、あなたのフォームname/id
にもよりますが、例えば$_GET['user_search']
を使って検索したいと思うかもしれない別の何かかもしれません。それを正しくエスケープし、文字列の最初と最後から不要な空白を削除するようにしてください。
relation
キーがあるので、これはarray( array() )
であることを覚えておいてください。単一のキーを検索するだけの場合は、次のように入力するほうが簡単な場合があります。
$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();
結果{mightは次のようになります。
$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();
これは私の代わりにkaiserの答えを助けてくれました: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
しかし、この解決策では$wpdb->escape($usermeta_keys)
関数がエラーを生成したので、私は単に$usermeta_keys
を使いました。