ログインしていないユーザーを特定のページにリダイレクトする方法は?


16

特定のページ/ URLを要求しているログに記録されていないユーザーを別のページ/ URLにリダイレクトし、「メンバーのみ」のようなメッセージを表示する方法。!is_user_logged_in()関数を使用してコーディングするのは非常に簡単ですが、WordPressの初心者であるため、コーディング方法がわかりません。コードを入れるファイルも教えてください。

回答:


30

特定のニーズに合わせて少し変更する必要がある2つの例を次に示します。

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

これを子テーマ関数ファイルに入れ、ページIDまたはスラッグとリダイレクトURLを変更します。

次のようなコードも使用できます。

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('slug') && ! is_user_logged_in() ) {

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

メッセージをページに直接追加するか、ログインしていないすべてのユーザーのメッセージを表示する場合は、コードに追加します

http://codex.wordpress.org/Function_Reference/wp_redirect


あなたのおかげで、私はこのようにやった答えadd_action('template_redirect', 'redirect_to_specific_page'); function redirect_to_specific_page() { if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) { wp_redirect('http://mydomain.com/login', 301); exit; } }しかし、その動作していない
user3187719


is_page( 'participate')
ブラッドダルトン14年

7

これは良いでしょう:

if ( !is_user_logged_in() ) {
    auth_redirect();
} 

// continue as normal for authenticated users

これにより、ユーザーがログインページにリダイレクトされます。ログインすると、ユーザーは最初にアクセスしようとしていた安全なページにリダイレクトされます。

ここにドキュメント:

https://codex.wordpress.org/Function_Reference/auth_redirect


4

何をどこに表示するかを指定しなかった場合、どのように配置するかをどのように伝えることができますか?投稿全体?ページ?ページのカスタム部分?申し訳ありません...私の水晶玉は今日はあまり機能していません。

あなたがいるので、私はあなたを引用します:「ワードプレスの初心者」は、直接答えを求めるよりもむしろ学ぶべきです。

どこ参考文献1のリンクで読むべきかについて。これにより、どのファイルを配置する必要があるかがわかります。

どのようには、最初に参照リンク2および3を読む必要があります。

全体的には次のようになります。

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

もちろん、上記のコードはループに入る必要があります。必要に応じて、複雑または単純に構築できます。たとえば、ログインしていない場合は、単純なテキストの代わりに、サインアップフォーム全体を表示できます。または-私が提案するように、ユーザーがログインできる(ユーザーはアカウントを持っているがサインインを忘れたため)分割画面(彼が持っていない場合)。

  1. テンプレート階層
  2. 条件付きタグ
  3. ループ

以下のコメントの後に追加:

-を使用headerしてwp_login_url再度リダイレクトするには、以下の参照1と2を確認してください。

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

参照:

  1. ヘッダー-PHP
  2. wp_login_url

実際に、リクエストされたURLまたはパーマリンクを返すwordpressの機能はわかりません。表示されるメッセージについては、そのままにしておきます。ログに記録されずに特定のURLを要求したときにリダイレクトしたいだけです。
user3187719 14年

$ pagenowでできますか?
user3187719

@ user3187719は元の回答を編集し、リダイレクトするソリューションを追加しました。PS。$pagenow?あなたは大砲でハエを殺そうとしていますが、それがうまくいくと確信していますが、なぜそんなに複雑ですか?複雑にしないでおく。PS2:PHPとWP Codexを学んでください。
ボレック14年

4

特定のページにリダイレクトすることはできませんが、ログインしていないユーザーはすべてログイン画面にリダイレクトされます。

<?php auth_redirect(); ?>

Wordpressリファレンス: auth_redirect()

別のソリューションに言及するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.