WordPressを用いたログイン機能が必要なWebアプリ開発で必須となる、登録ユーザーが重複しているかどうかの確認の実装方法についてを記述していきます。
global $wpdbでWordPressデータベースのオブジェクトにアクセス。
該当のテーブル名称を$wpdb->prefix . ‘テーブル名称’;で取得。
global $wpdb;
$table_name = $wpdb->prefix . '該当テーブルの名称';
サインアップ関数があると仮定し、引数に存在するパラメータ情報を取得します。
function handle_form_submission($request) {
$parameters = $request->get_params();
}
引数->get_params()とすることで、該当の変数にリクエストパラメータを格納できます。
※リクエストのボディ情報を含む全てのパラメータを取得することができます。このメソッドは、GET、POST、またはその他のHTTPメソッドを通じて送られたパラメータを含む配列を返します。
上記でパラメータの内容を格納した変数を取得します。
$email = $parameters['email'];
これにより検索をかけたい値を取得することができます(今回はemail)。
WordPressでSQLクエリを実行したい場合は、変数をクエリの中に安全に組み込むことができるprepareメソッドを使用します。
$query = $wpdb->prepare("SELECT COUNT(*) FROM $table_name WHERE email = %s", $email);
上記で用意したクエリを単一の結果を取得できるget_varメソッドで実行。
get_var(実行したいクエリ)で実行可能です。
$count = $wpdb->get_var($query);
これにより、count変数の中には該当テーブルに該当の値(今回はemail)が存在する数が格納されます。
上記で取得したcount変数の値によって処理を分岐させます。
今回の場合は、リクエストの中にあるメールアドレスの数が0以外の場合にはエラーを返し、それ以外の場合に実行したい処理を記述します。
if ($count > 0) {
return new WP_REST_Response(
['message' => 'このメールアドレスは既に登録されています。'],
409 // HTTPステータスコード
);
} else {
// 実行したい処理
}
WP_REST_Responseオブジェクトの第一引数にはレスポンスの内容、第二引数にはステータスコードを割り当てられるので、今回は、登録ずみの旨のステータスを割り当てています。
以上の状態により、該当の情報が既にテーブルに登録されているユーザーかどうかを確認する処理を記載することができました。
これによりサインアップ時などに重複したユーザーが登録されずに済む形となります。