wp_safe_redirect()が動かなかった

ここ最近かめりあfeat.ななひら曲に激ハマりしてます。特に焼肉。電波ソングはいいぞ。

ひさびさWordPress更新。

wp_safe_redirect()君が機嫌を損ねたのかリダイレクトしてくれなくて困ったのでメモ。

問題のコード

(オリジナルの)ログインページへ飛ばしたかった。

wp_safe_redirect( home_url() . 'login' );

これだけで何が悪いかすぐにわかった人は知識が深いというか、目敏いと思いますね・・・

解答

まずはwp_safe_redirect()の説明。

wp_redirect() を使って、安全な(ローカル)リダイレクトを実行します。
$location が絶対パスなら、許可されたホストを使っているかチェックします。そのため許可されたホストの追加や削除をプラグインから行えます。
ホストが許可されていなければ、代わりに wp-admin または siteurl へリダイレクトされます。これにより悪意のある別のホストへのリダイレクトを回避しますが、これを使うことはあまりないでしょう。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_safe_redirect

次にhome_url()の説明。

home_url テンプレートタグは、現在のブログのホーム URL を返します。オプションで引数 $pathの内容を付加して返すこともできます。この関数は適切なプロトコルを判定します。is_ssl()/en が有効な場合は “https”、それ以外の場合は “http” です。引数 $scheme で “http” か “https” を指定するとis_ssl() による判定は無視されます。WordPressで ネットワークの作成 をしている場合は、代わりに network_home_url() を使ってください。

https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/home_url

使い方。

<?php echo esc_url( home_url( '/' ) ); ?>

とどのつまり、リダイレクト先が http://hoge.comlogin みたいになっちゃてたわけですね。

wp_safe_redirect( home_url() . '/login' );

これに30分かけた自分お疲れ様です。サヨナラ。