サポート » 使い方全般 » ログイン画面以外はどんなURLでもリダイレクトさせたい

  • 解決済 charinchi

    (@charinchi)


    サイト訪問者はWordPressの管理画面でログインしないとサイト自体が見れないようにしたいです。ログインしていないと指定した外部サイトのあるURLへリダイレクトしたいです。

    しかし今の状態は、サイトのトップページをはじめ、存在するページを開いたら、確かに指定サイトのURLへリダイレクトしてくれますが、ところが存在しないページを開くと、見せたくないログイン後のサイトデザインが見えてしまっております。「お探しのページは見つかりませんでした。」のページが表示されてしまい、サイトのヘッダーやフッターが見えてしまっています。

    また、ログイン画面は当然ながらリダイレクトされないように例外にしないといけませんが、こちらは成功しています。

    トップページURLより下層は、例えどんな文字列をURLへ入れられたとしても、
    ログイン画面のURL以外はすべて指定の外部サイトURLへリダイレクトさせたいのですが、
    どのようにすれば良いでしょうか。
    以下が現状のphpコードです。
    なにとぞ宜しくお願い致します。

    function require_login() {
      if ( ! is_user_logged_in() &&
           ! preg_match( '/^(wp-login\.php|async-upload\.php)/', basename( $_SERVER['REQUEST_URI'] ) ) &&
           ! ( defined( 'DOING_AJAX' ) &&
           DOING_AJAX ) &&
           ! ( defined( 'DOING_CRON' ) &&
           DOING_CRON ) ) {
          wp_redirect('https://mysite.com/information');
      }
    }
    add_action( 'init', 'require_login' );
    • このトピックはcharinchiが1ヶ月、 2週前に変更しました。
    • このトピックはcharinchiが1ヶ月、 2週前に変更しました。
    • このトピックはcharinchiが1ヶ月、 2週前に変更しました。
9件の返信を表示中 - 1 - 9件目 (全9件中)
  • スレッド開始 charinchi

    (@charinchi)

    質問に追記を思いつきましたので記載致します。

    上記の案ではない以下の方法でもできるのならそれでも良いなと感じました。

    「wp-login.phpからユーザーログインしていない場合、通常の404ページ(ページが存在しないですよのページ)のデザインではなく、ページが真っ白で、説明だけが黒文字で書かれてある404ページを別途作成し、それが開くようにする」

    なぜ別の404ページを開かせたいかというと、デフォルトの404ページですと、ヘッダー上部左のサービスのロゴマークも、ヘッダーのグローバルナビゲーションも、フッターも、すべてログインした人しか見せたくないデザインが表示されてしまうからです。
    コンテンツの一部が見えてしまっているので、これを一切見せないようにせねばならないです。

    https://misite.com/contact/ など、作成したページのURLへアクセスされた場合は上述のコードで指定した別ドメインのURLへちゃんとリダイレクトしてくれるのですが、存在しないURLにアクセスされた場合、会員サイトの体裁で404ページが開いてしまうため、困っております。

    お手数おかけいたしますがご助言いただけましたら大変ありがたいです。
    宜しくお願い致します。

    • この返信は1ヶ月、 2週前にcharinchiが編集しました。
    • この返信は1ヶ月、 2週前にcharinchiが編集しました。

    こんにちは。
    要望を伺っている限り、
    WP Maintenance Mode などのプラグインを使う方が手軽で、良いかもしれません。

    プラグインを使う場合、バックアップを取った上で、既存のカスタマイズコードを削除してからお試しください。

    このプラグインは本来はサイトリニューアルなどの時に公開ページを表示するのではなく、
    「メンテナンスモード(工事中)」と表示させておく用途で使われますが、メンテナンスモードという単語を
    別のものに「会員限定」などにすれば良いかもしれません。

    アカウントがないサイト訪問者→メンテナンスモードの画面を表示
    アカウントがある人→wp-login.php にログインする。サイトが閲覧できる。

    プラグインのページ
    https://ja.wordpress.org/plugins/wp-maintenance-mode/

    使い方参考
    https://netaone.com/wp/wp-maintenance-mode/

    ご希望を満たせるかご確認いただければと思います。

    スレッド開始 charinchi

    (@charinchi)

    @yukinobu さま、お忙しい中ご助言いただきましてまことにありがとうございます。
    実は私がそこまで書いていなかったので申し訳なかったのですが、WordPressやPHP、MySQLのバージョンアップに伴ってプラグインは動作しなくなることを多々経験してきていまして、その理由から、プラグインではなくて子テーマのfunctions.phpやhtaccessへの記述によって達成したく思っております。
    あともうちょっとで達成できそうなのですが・・・

    方法がどうにもこうにもなかった場合、ご提案いただいた WP Maintenance Mode  も含めて検討したく思っております。私も WP Maintenance Mode を以前利用したことがありましたがサイトの準備中以外の本件でも応用できるかも知れないのですね。貴重な情報、まことにありがとうございます。

    • この返信は1ヶ月、 2週前にcharinchiが編集しました。
    • この返信は1ヶ月、 2週前にcharinchiが編集しました。

    なるほどですね。
    .htaccessでリダイレクトする場合には以下の記述で、指定するサイトへリダイレクト出来ると思います。

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase / 
    RewriteCond %{REQUEST_URI} !^(.*)?wp-login\.php
    RewriteCond %{REQUEST_URI} !^(.*)?wp-admin
    RewriteRule ^(.*)$ http://リダイレクト先のドメイン$1 [R=301,L] 
    </ifModule>
    スレッド開始 charinchi

    (@charinchi)

    @yukinobu さま、重ねて御礼申し上げます。
    その.htaccessの記述では、ログイン後にサイト内のどんなページを開いても、wp-login.phpとwp-admin以外のURLはリダイレクトされてしまうと思っていましたが、勘違いだったかも知れませんね。まずはやってみます。

    スレッド開始 charinchi

    (@charinchi)

    @yukinobu さま、htaccessをおこなってみました。
    wp-login.phpとwp-adminにアクセスするとログイン画面が表示されました。
    他のページは狙い通りにリダイレクトされました。

    しかし、ログインすると、ログイン直後にリダイレクトされてしまいました。
    サイトを表示することができませんでした。
    やはりログイン前とログイン後の違いが判断できないようです。

    失礼しました。まずは訂正いたします。

    wp_redirect() の後、処理を終了すればいいのでは?

    wp_redirect(・・・);
    exit(); // ←追加
    スレッド開始 charinchi

    (@charinchi)

    @yukinobu さま、とんでも御座いません、いつもありがとうございます。今後とも宜しくお願い致します。

    @ishitaka さま、成功いたしました・・・ exitで抜け出せば良かったのですか・・・
    プログラミング初心者なものですから、なぜexitで終了すると存在しないページもちゃんとリダイレクトするようになるのかまだ理解できておりませんが自分で調べます。
    まことにありがとうございました!

    • この返信は1ヶ月、 2週前にcharinchiが編集しました。
9件の返信を表示中 - 1 - 9件目 (全9件中)
  • このトピックに返信するにはログインが必要です。