ログイン状態を判別してリダイレクトする方法
-
ログインしているかどうかを判定する関数に、is_user_logged_inがあるので、
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/is_user_logged_inまずこの関数を使ってみてはいかがでしょうか。
ご返信頂きありがとうございます。
貼り付け頂いたURLは、すでに参照済みなのですが、PHP初心者のため、今回実装したいコードへの応用が出来ず困っております。<?php
if ( is_user_logged_in() ) {
echo ‘Welcome, registered user!’; →ログインユーザーは、ページ(/123.html)へリダイレクトしたい
} else {
echo ‘Welcome, visitor!’; →非ログインユーザーは、ページ(/abc.html)をそのまま表示したい
}
?>お手数ですが、何かアドバイス頂ければ助かります!
宜しくお願いいたします。スレ主もwordpressでのリダイレクトを目にしてると思うけど、多分絶対。
その目にしている仕組みを追っていけばヒントが有るんじゃないでしょうか。
例えば管理画面へ入るためのログインのページ。
当然ここにはリダイレクトの仕組みがあるんではないでしょうか。
該当ファイルのヒントも検索していれば色々出てくるような気が
ログインができない場合
特に本日は祝日なのであまり回答がつかないかもしれない。
そういうときに検索勘を身に着けておくと役に立つかもしれませんね。ちなみに自分コピペ職人なんでまったくわかってませんけどね。
ご健闘をお祈りします。-
この返信は8年、 4ヶ月前に
oisitが編集しました。
oisit様、ご回答ありがとうございます。
はい。おっしゃる通り、リダイレクトのコードは、別のテンプレート内で下記のタグを使用しております。
<?php
if (!is_user_logged_in()) {
auth_redirect();
}これを今回やりたいことに当てはめながら、いじっておりましたが、私も検索&コピペばかりなので、応用が出来ず、この度、質問をさせて頂いた次第です。
上記コードは、「ログイン状態判別後、ログインしていなかったら、ログイン画面へリダイレクト」
やりたいのは、「ログイン状態判別後、ログインしていたら、任意のページにリダイレクト」貴重なお時間を頂きご回答下さりきありがとうございました。
引き続き検索しながら情報を探してみます。munyagu様、ご回答ありがとうございます。
参照先のURL確認いたしました。ありがとうございます。これまで頂いた情報をまとめて、再度コードを書いてみましたが、実装できませんでした。。。。
下記の式で間違っている箇所はありますでしょうか?<?php
if ( is_user_logged_in() ) { /*ログイン状態を判別して*/
echo ‘wp_redirect( home_url(http://xxx.com/123.html) )’;/*ログインしていたら123へリダイレクト*/
} else {
echo ‘home_url(http://xxx.com/abc.html)’;/*ログインしていなかったら、abcをそのまま表示*/
}
?>また、上記の式に管理者権限のリダイレクトを無効にする処理を追記したいのですが、もし参考のURLなどありましたら、教えて頂ければ助かります。
ご返信頂ければ幸いです。
宜しくお願い致します。すでに正解をみつけておいでかもしれませんが、
ご自分の`if (!is_user_logged_in()) {
auth_redirect();
}`や@munyagu氏があげたリンク先を再度参照されてはどうでしょう。
wp_redirect()
は関数であり、echo
は文字列を出力するですよ。
関数を文字列として出力しても動かないんじゃないでしょうか。
関数をいちいち検索していると、なんとなくわかってくるから不思議です。
また関連する知識も増えていくので面白いですよ。-
この返信は8年、 4ヶ月前に
oisitが編集しました。
考え方として、
/abc.html にアクセスした場合限定なので、そのテンプレートがどこで使われているかで、
– /abc.html かつ ログインしていて管理者権限を持っていないユーザーの場合のみ、 /123.html にリダイレクト
がベースだと思います。1. /abc.html の判定
パーマリンクから取得できないことはないですが、abc.html などパーマリンクを変更されているようにお見受けしますので、Refererの方が簡単かな…$referer = wp_get_referer(); if(preg_match("/^abc\.html$", $referer)){ ここに処理を書く }
という感じになると思います。
2. ログインしていて管理者権限を持っていないユーザー
if(is_user_logged_in() && !current_user_can('administrator')){ ここに処理を書く }
3. リダイレクト
`wp_safe_redirect(home_url() . ‘/123.html’);ですね。
これらを組み合わせれば、できるんじゃないかと思います。
oisit様、ご返信ありがとうございます。
本当にその通りですよね。
関数の意味なんて私はいちいち分析して考えてなかったので、ほしい情報のキーワードだけ検索しているばかりでした。
「echo」というものが、文字を表示する際のタグになることなんて考えてませんでした。
こういう意味があるなんてはじめて知りました。この度、kimipooh様に頂いた情報も加えて、以下の式でやりたいことをとりあえず実装出来ました!
<?php
if(is_user_logged_in() && !current_user_can(‘administrator’)){/*管理者以外のログインユーザーなら*/
$url = ‘http://xxx.com/123.html’;/*123へリダイレクト*/
wp_redirect($url);
exit;
} else {/*それ以外は特別処理なし*/
}
?>色々教えて頂いてありがとうございました。
kimipooh様、ご返信ありがとうございます。
以下の式でとりあえずやりたいことを実装出来ました。
貴重な情報をありがとうございました。<?php
if(is_user_logged_in() && !current_user_can(‘administrator’)){/*管理者以外のログインユーザーなら*/
$url = ‘http://xxx.com/123.html’;/*123へリダイレクト*/
wp_redirect($url);
exit;
} else {/*それ以外は特別処理なし*/
}
?>しかし、下記のリファー関数を加えた式が上手く動かず、上記のように強制的にURLを指定する方法をとりました。
頂いた情報から私が組み合わせた式は以下のようなものです。<?php
if(is_user_logged_in() && !current_user_can(‘administrator’)){/*管理者以外のログインユーザーなら*/
$referer = wp_get_referer();
if(preg_match(“/^abc\.html$”, $referer)){/*abcをそのまま表示*/
wp_safe_redirect(home_url() . ‘/123.html’);/*非ログインユーザーなら123へリダイクレト*/
}
?>上記の式で間違っている箇所がありますでしょうか?
現在の式(リファー関数未使用)でやりたいことが実装できておりますが、リファー関数を使用する方が「簡単」という以外で、何か理由があるものでしょうか?何かアドバイス頂ければ幸いです。
宜しくお願いいたします。Refererを使うのは、
/abc.html のときだけ処理したいという要望があったためです。
Refererは現在アクセスしているページの情報が入っています。
そういうのが不要なら必要ありません。たとえば、
1. abc.html 内にリダイレクト処理をいれてる
2. リダイレクト処理は、 abc.html専用のテンプレートを使っている
という感じです。テンプレートを使いまわしているケースでは、Refererなどの処理が必要になるということです。
そのあたりの詳細構造がわからなかったので、一般的な対応策をいれたのでした。また
$referer = wp_get_referer();
var_dump($referer);として、$referer にどういった文字が入っているか確認してみるとよいです。
http://◯◯/abc.html なら
/abc.html が入っているはずなんですけどね。
それをみて、 /abc.html だったらという処理をいれるという感じです。ですがテンプレートが abc.html 専用なのであれば不要です。 -
この返信は8年、 4ヶ月前に
- トピック「ログイン状態を判別してリダイレクトする方法」には新たに返信することはできません。