WordPressで固定ページにログインフォームを設置する方法

February 22, 2016 Jul 23, 2018

WordPressで固定ページにログインフォームを設置する方法を紹介したいと思う。ちなみに、ただ単に会員制サイトを作成したい場合は、プラグインがオススメだ。ログインフォームや登録画面を任意の固定ページに設置することができる。

Theme My Login

しかし状況によってはプラグインを使わずに特定のページにフォームを設置する必要がある場合もある。

プラグインを使わずに固定ページにログインフォームを設置する方法

今回のケースは、特定のサービスを提供するページにログインフォームを設置したいというケース。

資料請求ページ等、通常のログインページとは別のページにログインフォームを設置したい、というような場合はプラグインを使わずにフォームを設置したいものだ。

ログインフォームを設置する場合の注意点

WordPress標準仕様に関して注意点がいくつかある。仕様として実現したいのは以下だ。

  1.  ログイン後、ログイン画面があった固定ページにとどまりたい
  2. ログイン失敗 ログインに失敗した場合にその固定ページにエラーメッセージを表示した

上記の仕様を実現する方法を以下に紹介する。

まずは基本的な点だが、念のため、

ユーザーがログインしているかどうかで条件分岐する

<?php if (current_user_can('administrator')) {  //管理人にのみ表示 ?>
<?php } else { //ログインしてないユーザー ?>
<?php } //分岐終了 ?>
<?php if ( is_user_logged_in() ) {  //ログインユーザー ?>
<?php } else { //ログインしてないユーザー ?>
<?php } //分岐終了 ?>

固定ページにログインフォームを表示

詳しくは公式ページ参照

テンプレートタグ/wp login form

<?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 } ?>

スポンサーサイト

RELATED POSTS