htaccessで制限するのではなくlogin_init
アクションでなんとかしてみるのはどうでしょう。
add_action( 'login_init', function() {
wp_safe_redirect( home_url() );
} );
で試してみたらちゃんと弾いてくれました。
—
追記)
あ、この場合でもそのままだとformからのpostを弾いてしまいますよね。。でも、htaccessよりはいろいろ条件を分岐させて柔軟に対処できそうな気がします。
例えば、
add_action( 'login_init', function() {
$log = filter_input( INPUT_POST, 'log' );
$pwd = filter_input( INPUT_POST, 'pwd' );
if ( ! $log || ! $pwd )
wp_safe_redirect( home_url() );
} );
というような感じですかね。
mimosafa様
ご連絡ありがとうございます。
これで行けました!wp-redirectで同じことを試したのですが、その時はpostが弾かれてダメだったのかもしれませんが、 wp_safe_redirectは大丈夫でした。初めて知った関数でした。
ありがとうございました!
解決したのであればよかったです。
これで行けました!wp-redirectで同じことを試したのですが、その時はpostが弾かれてダメだったのかもしれませんが、 wp_safe_redirectは大丈夫でした。初めて知った関数でした。
postが弾かれる、というのは form
のaction
属性でwp-login.php
が指定されているので、フォームに入力された情報を送るときにリダイレクトされてしまいログインが出来ないのでは… というつもりでした。
wp_redirect
とwp_safe_redirect
で今回の件について挙動の差異が発生する原因はわからないので何か悶々とします ^^;
Twenty Fifteen テーマの子テーマ使用で、子テーマのfunctions.php
に下記コードを加えて検証してみました。
add_action( 'login_init', function() {
/**
* $_POST の内容で条件分岐をしない
* wp_redirect
*/
wp_redirect( home_url() );
} );
add_action( 'get_sidebar', function() {
if ( ! is_user_logged_in() ) {
// 以下、ご質問内容にあるコード
?>
<form method="post" action="<?php echo wp_login_url() ?>?redirect_to=<?php echo esc_attr($_SERVER['REQUEST_URI']) ?>">
<label for="login_username">ユーザー名:</label>
<input type="text" name="log" id="login_username" value="" />
<label for="login_password">パスワード:</label>
<input type="password" name="pwd" id="login_password" value="" />
<input id="user_submit" type="submit" value="ログイン" />
</form>
<?php
}
} );
上記でおそらく思惑通りの動きをしたんですよね…
どこか別のところに問題があったのかもしれませんね。
mimosafa様
ご連絡ありがとうございます。
ダメだった時のコードはwp_redirectを使ったのは覚えているんですが、
正確なのコードを残していないので、うる覚えですが、載せていただいているfunctionのコードでほぼ同じ気がします。
ちなみに、関係あるかは判りませんが、パスワード変更用にLogin Widget With Shortcodeというプラグインは使っています。
すみません、Login Widget With Shortcode のコードをちら見してみたのですが、いまいち関連があるかわかりませんでした – -;
wp_redirect
とwp_safe_redirect
との挙動の違いが気になっていろいろ調べていたのですが、こちらも判然としません… (wp_redirect
からwp_safe_redirect
への修正が必要な例..)
少なくとも私の提示したコードについては(いずれの関数にしても)直後にexit;
が入っていませんでしたので修正させて下さいっ
add_action( 'login_init', function() {
wp_safe_redirect( home_url() ); // wp_redirect( home_url() ); でもOK?
exit;
} );
私もまだまだ勉強中です。
これからもよろしくお願いします。