URLをコピーしました!
スキルアップを始める!

【WordPress】ワードプレスの会員ログイン画面をプラグインを使わず自力で作成してみる〜functions.php編〜

WordPress(ワードプレス)
\ワードプレスのスキルアップはこちら!/ WordPress入門読本

ワードプレスに「会員登録機能を付けたい・・・!」と思ったときには、プラグインを使う方法が思いつくかと思いますが、そもそもどうやって作るのか…?と思ったので、実際に試してみることにしました。

■ご参考にさせていただきました。ありがとうございます。
WordPressで会員登録フォームとログインフォームを自作してみる【プラグインなし】
WordPressにログインフォームを独自に実装する

新規会員登録フォーム作成

このあたりは、過去にも同じような内容を書いたので省略しますが、「パスワードを忘れた方は」を作りたい場合に、下記のような1行を追加してみます。

パスワードを忘れた方は<a href="/wp-login.php?action=lostpassword">こちら</a>

ただこのままだとワードプレスの「ユーザー名、またはメールアドレスを入力してください。パスワードのリセット手順が記されたメールが送信されます。」のページに移動するので、このあたりの処理も、おいおい追加してみたいと思います。

functions.php ログイン

/*** ログインに関する処理を実行する ***/
//アクションフックを追加
add_action( 'template_redirect', 'login_init' );

//関数を実行
function login_init() {
//ログインページでなければ実行しない
if ( ! is_page( 'login' ) ) {
return;
}

//変数を準備
global $email, $error;
$email = "";
$error = "";

//HTML入力フォームの値を受信
if ( isset( $_POST['login_nonce'] ) ) {
//nonce用ハッシュ値を検証します
if ( ! wp_verify_nonce( $_POST['login_nonce'], 'login') ) {
$error .= '不正な遷移です';
} else {
if ( ! empty( $_POST['user_email'] ) ) {
$email = $_POST['user_email'];
} else {
$error .= "メールアドレスを入力してください";
}
if ( ! empty( $_POST['user_pass'] ) ) {
$password = $_POST['user_pass'];
} else {
//パスワードが空白であれば
$error .= "パスワードを入力してください";
}
}
 
if ( ! $error ) {
//ユーザー取得
$user = get_user_by( 'email', $email );
if ( false === $user ) {
$error .= "メールアドレスが間違っています。";
} else {
//ログイン実行
$creds = array();
$creds['user_login'] = $user->data->user_login;
$creds['user_password'] = $password;
$creds['remember'] = true;
$user = wp_signon( $creds, false );
if ( is_wp_error( $user ) ) {
if ( array_key_exists( 'incorrect_password', $user->errors ) ) {
$error .= "パスワードが間違っています。";
} else {
$error .= "ログインに失敗しました。";
}
} else {
 //ログイン成功→リダイレクト
wp_safe_redirect( '/login-success/');
}
}
}
}
}

前は、ログイン成功したタイミングでthe_parmalink()としていましたが、別のページに遷移した方が良さそうでしたので、少し修正をしてみます。

wp_safe_redirect( the_parmalink() );

テンプレートタグ/the permalink

「ログイン成功ページ」に移動するように変更。

//ログイン成功→リダイレクト
wp_safe_redirect( '/login-success/');

動きました!!

気になった点・メモ

ログインを押したあと、30秒ほど?is_user_logged_in()に入らない・・・?時間があるような感じがします。・・・なぜか。

ログインはできているような感じなのですが、どこかがおかしい・・・

間になにかの処理が必要なのでしょうか…?

んー…。(^_^;) また何か分かったら、追記したいと思います。

メンター
メンター

ちょっとまだ分からない点が多いです・・・!すみません!

メンティー
メンティー

大丈夫です!私も覚えます!!

まとめ

ワードプレスは覚えれば覚えるほど楽しくなりますので、ぜひ挑戦してみることがオススメです!

「あなたのスキルアップを、形に。」

▶参考

Kindle Unlimited 会員は無料で購読できます
購読はこちら
Kindle Unlimited 会員は無料で購読できます
購読はこちら