ユーザーを検索するための検索フォームの入力に基づいて、複数の条件を持つ SQL WHERE クエリを作成しようとしています。各入力は、フォームで 1 つのフィールドのみが選択されている場合に機能します。2 つ以上の入力フィールドの組み合わせが送信された場合、結果は得られません。
ここでの 2 つのオプションは、説明のためのものであることに注意してください。より多くのオプションが使用されています。したがって、各オプションを個別に検索する必要があります。
コードは次のとおりです。
global $wpdb;
$user_ids = array();
$user_query = null;
if (isset($_REQUEST['search']) && !empty($_REQUEST['search']) ) {
$s = $_REQUEST['search'];
$user_query .= "((meta_key='first_name' AND meta_value LIKE '%".$s."%') OR (meta_key='last_name' AND meta_value LIKE '%".$s."%') OR (meta_key='display_name' AND meta_value LIKE '%".$s."%') OR (meta_key='nice_name' AND meta_value LIKE '%".$s."%'))";
}
if (isset($_REQUEST['email']) && !empty($_REQUEST['email']) ) {
$s = $_REQUEST['email'];
if ($user_query) {
$user_query .= "AND (meta_key='user_email' AND meta_value='".$s."')";
} else {
$user_query .= "(meta_key='user_email' AND meta_value='".$s."')";
}
}
if (!empty($user_query)) {
$wp_users = $wpdb->get_results("SELECT user_id FROM $wpdb->usermeta JOIN $wpdb->users ON $wpdb->usermeta.user_id=$wpdb->users.ID WHERE ($user_query)");
}
実行する必要がある SQL クエリは次のとおりです。
$wp_users = $wpdb->get_results("SELECT user_id FROM $wpdb->usermeta JOIN $wpdb->users ON $wpdb->usermeta.user_id=$wpdb->users.ID WHERE (((meta_key='first_name' AND meta_value LIKE '%".$s."%') OR (meta_key='last_name' AND meta_value LIKE '%".$s."%') OR (meta_key='display_name' AND meta_value LIKE '%".$s."%') OR (meta_key='nice_name' AND meta_value LIKE '%".$s."%')) AND (meta_key='user_email' AND meta_value='".$s."'))");
上記のクエリでエラーを見つけるのを手伝ってください。