WordPressで固定ページにログインフォームを設置する方法を紹介したいと思う。ちなみに、ただ単に会員制サイトを作成したい場合は、プラグインがオススメだ。ログインフォームや登録画面を任意の固定ページに設置することができる。
しかし状況によってはプラグインを使わずに特定のページにフォームを設置する必要がある場合もある。
プラグインを使わずに固定ページにログインフォームを設置する方法
今回のケースは、特定のサービスを提供するページにログインフォームを設置したいというケース。
資料請求ページ等、通常のログインページとは別のページにログインフォームを設置したい、というような場合はプラグインを使わずにフォームを設置したいものだ。
ログインフォームを設置する場合の注意点
WordPress標準仕様に関して注意点がいくつかある。仕様として実現したいのは以下だ。
- ログイン後、ログイン画面があった固定ページにとどまりたい
- ログイン失敗 ログインに失敗した場合にその固定ページにエラーメッセージを表示した
上記の仕様を実現する方法を以下に紹介する。
まずは基本的な点だが、念のため、
ユーザーがログインしているかどうかで条件分岐する
<?php if (current_user_can('administrator')) { //管理人にのみ表示 ?> <?php } else { //ログインしてないユーザー ?> <?php } //分岐終了 ?> <?php if ( is_user_logged_in() ) { //ログインユーザー ?> <?php } else { //ログインしてないユーザー ?> <?php } //分岐終了 ?>
固定ページにログインフォームを表示
詳しくは公式ページ参照
<?php wp_login_form( $args ); ?>
ログイン後、固定ページに留まり、ログイン失敗した場合はURLにクエリパラメータを付与
以下をfunction.phpに挿入。URLにmessage=failed というパラメータを付与できる。、
add_action('wp_login_failed', 'ez_sparrow_login_failed'); function ez_sparrow_login_failed($username) { $page = $_SERVER['HTTP_REFERER']; $failed = '?message=failed'; if(!empty($page) && !preg_match('/wp-admin/', $page)) { if(!preg_match('/message=failed/', $page)) { $page .= $failed; } wp_redirect($page); } }
固定ページ側でクエリパラメータに応じて条件分岐
以下のコードで、クエリパラメータに応じて条件分岐させることができる。
<?php if( $_GET ["message"] == "failed") { /* URLに?message=failedというパラメータが付与されていた場合 */ ?> ここにエラーメッセージ <?php } ?>