サポート » 使い方全般 » ログイン状態を判別してリダイレクトする方法

  • 解決済 mikujin

    (@mikujin)


    お世話になります。
    PHPのテンプレート内に下記の分岐タグを書きたいのですが、書き方が分からず困っております。

    ページ(/abc.html)へアクセスする際、ログイン状態を判別して、
    ログインしている場合、ページ(/123.html)へリダイレクト。
    ログインしていない場合、ページ(/abc.html)をそのまま表示。
    さらに、管理者権限でログインしている場合は、リダイレクト処理を無効にしたいのすが、どのような書き方をすれば可能でしょうか?

    ご教授頂けましたら大変助かります。
    宜しくお願いいたします。

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • ログインしているかどうかを判定する関数に、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

    まずこの関数を使ってみてはいかがでしょうか。

    トピック投稿者 mikujin

    (@mikujin)

    ご返信頂きありがとうございます。
    貼り付け頂いたURLは、すでに参照済みなのですが、PHP初心者のため、今回実装したいコードへの応用が出来ず困っております。

    <?php
    if ( is_user_logged_in() ) {
    echo ‘Welcome, registered user!’; →ログインユーザーは、ページ(/123.html)へリダイレクトしたい
    } else {
    echo ‘Welcome, visitor!’;      →非ログインユーザーは、ページ(/abc.html)をそのまま表示したい
    }
    ?>

    お手数ですが、何かアドバイス頂ければ助かります!
    宜しくお願いいたします。

    スレ主もwordpressでのリダイレクトを目にしてると思うけど、多分絶対。
    その目にしている仕組みを追っていけばヒントが有るんじゃないでしょうか。
    例えば管理画面へ入るためのログインのページ。
    当然ここにはリダイレクトの仕組みがあるんではないでしょうか。
    該当ファイルのヒントも検索していれば色々出てくるような気が
    ログインができない場合
    特に本日は祝日なのであまり回答がつかないかもしれない。
    そういうときに検索勘を身に着けておくと役に立つかもしれませんね。

    ちなみに自分コピペ職人なんでまったくわかってませんけどね。
    ご健闘をお祈りします。

    • この返信は7年、 5ヶ月前にoisitが編集しました。

    こんにちは

    リダイレクトはこちらです。

    https://wpdocs.osdn.jp/関数リファレンス/wp_redirect

    トピック投稿者 mikujin

    (@mikujin)

    oisit様、ご回答ありがとうございます。

    はい。おっしゃる通り、リダイレクトのコードは、別のテンプレート内で下記のタグを使用しております。

    <?php
    if (!is_user_logged_in()) {
    auth_redirect();
    }

    これを今回やりたいことに当てはめながら、いじっておりましたが、私も検索&コピペばかりなので、応用が出来ず、この度、質問をさせて頂いた次第です。

    上記コードは、「ログイン状態判別後、ログインしていなかったら、ログイン画面へリダイレクト」
    やりたいのは、「ログイン状態判別後、ログインしていたら、任意のページにリダイレクト」

    貴重なお時間を頂きご回答下さりきありがとうございました。
    引き続き検索しながら情報を探してみます。

    トピック投稿者 mikujin

    (@mikujin)

    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文字列を出力するですよ。
    関数を文字列として出力しても動かないんじゃないでしょうか。
    関数をいちいち検索していると、なんとなくわかってくるから不思議です。
    また関連する知識も増えていくので面白いですよ。

    • この返信は7年、 5ヶ月前に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’);

    ですね。

    これらを組み合わせれば、できるんじゃないかと思います。

    訂正
    3. リダイレクト
    wp_safe_redirect(home_url() . '/123.html');

    トピック投稿者 mikujin

    (@mikujin)

    oisit様、ご返信ありがとうございます。

    本当にその通りですよね。
    関数の意味なんて私はいちいち分析して考えてなかったので、ほしい情報のキーワードだけ検索しているばかりでした。
    「echo」というものが、文字を表示する際のタグになることなんて考えてませんでした。
    こういう意味があるなんてはじめて知りました。

    この度、kimipooh様に頂いた情報も加えて、以下の式でやりたいことをとりあえず実装出来ました!

    <?php
    if(is_user_logged_in() && !current_user_can(‘administrator’)){/*管理者以外のログインユーザーなら*/
    $url = ‘http://xxx.com/123.html&#8217;;/*123へリダイレクト*/
    wp_redirect($url);
    exit;
    } else {/*それ以外は特別処理なし*/
    }
    ?>

    色々教えて頂いてありがとうございました。

    トピック投稿者 mikujin

    (@mikujin)

    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 専用なのであれば不要です。

    トピック投稿者 mikujin

    (@mikujin)

    kimipooh様、ご返信ありがとうございます。
    なるほど。そういう使い分けなのですね。
    abc.htmlの記事に対して、専用のテンプレートを使用しており、1テンプレートに対して1記事なので、現在の処理でも問題はなさそうですね。
    今後、リファー関数を使用する機会がありましたら、改めて参考にさせて頂きます。
    すべての問題が解決できました。
    ありがとうございました!!

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • トピック「ログイン状態を判別してリダイレクトする方法」には新たに返信することはできません。