hideki18
メンバー
3 years前の投稿 #
WordPress初心者です。
はじめて投稿します。よろしくお願いします。
今、Wordpress2.6をカスタマイズして、
ユーザー参加型の画像投稿サイトを作成しています。
それで、ユーザー専用の管理画面を作成したので、
user_levelが10以外の人はログインしたときに
通常の管理画面ではなく私が作った画面
(例として http://domain/wordpress/?page_id=10)
にリダイレクトしたいと思っています。
しかし、私のやり方では、なぜか
http://domain/?page_id=10
に飛んでしまいます。
一体どこを調べたらいいか分からなくなってしまったので
なんとかお知恵をお借りできたら思い投稿させていただきました。
私がやったのは、
/wp-login.php
の中の
case 'login';
の中にある$redirect_toを変更しました。
$redirect_toの中身は確かに合っていました。
しかし、ここでとても不思議なことがありました。
$redirect_to = 'http://yahoo.co.jp';
echo $redirect_to;
exit;
とすると、
なんと
http://domain/wordpresshttp://yahoo.co.jp
と表示されるのです。
一体これはどんな割り込み処理が働いているのでしょう・・・
hideki18
メンバー
3 years前の投稿 #
一応できるようになったのでご報告だけさせていただきます。
しかし、理由がしっくり来ないのですが・・・
$redirect_to = site_url(ここにhttp://からのURL);
とsite_urlで囲ってやると飛んでくれました。
site_urlで出力されるURLも
この関数につっこむ内容も同じなんですけどね・・
このようにsite_urlやclean_urlで囲ってやらないとリダイレクトが
聞かないケースが多いです。
謎です。。
また調べて見たいと思います。
が、もし何かお心当たりなどなんでも結構ですのでいただけましたら
幸いです。
よろしくお願いします。
$redirect_to = 'http://yahoo.co.jp';
echo $redirect_to;
exit;
とすると、
なんと
http://domain/wordpresshttp://yahoo.co.jp
と表示されるのです。
原則として、redirect_to には他のサイトを入れられません。リダイレクト先として許可されたホストでない限り、管理パネルの URL に書き換えられてしまいます。
また、HTTP の Location ヘッダの仕様として、ホスト名から書くことが必要です。書かれている結果はちょっと不思議な気もしますが、これらの仕様からはありえる動作です。
site_url や clean_url を通すと、安全な URL かどうかを判定して出力しますので、その結果であれば、そのまま通るのでしょう。wp-includes/pluggable.php にある wp_safe_redirect() などの関数を調べてみてください。
あと、ホスト名の例示として「domain」だけの単語を使われていますが、example.com や example.jp などが用意されていますので、こちらを使った方が何かと便利です。「domain」だと意味的にちょっと変です (まだ「FQDN」と書くなら分からなくもないですが)。
hideki18
メンバー
3 years前の投稿 #
lilyfan様
いろいろアドバイスいただきまして
ありがとうございます。
とても参考になります。
リダイレクトについてはまだ謎ですが、
wp_safe_redirect() について調べてみます。
example.comについても了解いたしました。
あまり慣例を知らないので
勉強になります。
ありがとうございます。