Codeworks Notes

 2019-08-19

 2020-02-10

Wordpress
バックエンド

ログインフォームが空のときのリダイレクト処理

WordPressで会員制サイトを作り、オリジナルのログイン画面を使用してログインエラー時のリダイレクト処理をしたとしても、フォームが空のまま送信されたときの戻り先が指定できない問題があります。

wp-include/pluggable.php に直接書き込む みたいな力技がある、という方もいらっしゃいますが、人様がいじって良いのはテーマファイルであって、pluggable.phpはコアファイルなので、WPアップデートがあれば改造箇所が元に戻されます。

ということでWPバージョンが上がっても影響のないファンクションフック一択となります。

実際の処理を書く

functions.php に以下のコードを記述します。

<?php
add_action('wp_authenticate', 'empty_login_failed', 1, 2);
function empty_login_failed ($username, $password) {
   if (empty($username) || empty($password) || !empty($url)) {
       wp_redirect('/login/?login=failed');
       exit();
   }
}
?>

これでフォームから送られる引数がnullであっても狙い通りのリダイレクト先へ飛ぶようになります。