ログイン後にユーザーを元のURLにリダイレクトしますか?


16

ユーザーがログインせずに他のページにアクセスしようとすると、ログインページ(ホーム)にユーザーをリダイレクトする機能があります。その仕組みを次に示します。

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( get_option('home') );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

本当にシンプルで問題なく動作します。問題は、WordPressバックエンドが機能するのとまったく同じように、ログインに成功した後、アクセスしようとしたURLにリダイレクトする必要があることです。

これを行う方法はありますか?前もって感謝します!

回答:


16

簡単にできます。リダイレクトパラメータを指定するだけです。ホームページのログインリンクを使用してログインページに移動している場合、@ sisirのソリューションは正しいです。

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>

フロントページでカスタムフォームを使用している場合は、内部<form>で、非表示フィールドにリダイレクトするURLを入力してください

<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>" />

またwp_login_form()、フォームの生成に使用している場合は、パラメーターを入力します-http://codex.wordpress.org/Function_Reference/wp_login_form

<?php
$args = array(
        'echo' => true,
        'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 
        'form_id' => 'loginform',
        'label_username' => __( 'Username' ),
        'label_password' => __( 'Password' ),
        'label_remember' => __( 'Remember Me' ),
        'label_log_in' => __( 'Log In' ),
        'id_username' => 'user_login',
        'id_password' => 'user_pass',
        'id_remember' => 'rememberme',
        'id_submit' => 'wp-submit',
        'remember' => true,
        'value_username' => NULL,
        'value_remember' => false );

wp_login_form( $args );
?>

持っているものや必要なものに応じて他のパラメーターを変更します。


私はカスタムフォームを使用しており、提供された隠しフィールドソリューションを使用していますが、私の場合、この「localhost / wordpress / localhost / wordpress / blog / someone」のようなURLにリダイレクトされています。何か助け?
ラフィ14

私はこれを持っている、私はダブルスラッシュを使用しています。私の解決策はこの<?php echo '//'のようなものです。$ _SERVER ["HTTP_HOST"]。$ _SERVER ["REQUEST_URI"]; ?>
rafi 14

6

引数the_permalink()として渡してみてください$redirect

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( the_permalink() );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

編集:

申し訳ありませんが、元々あなたの質問を誤解していました。これを試して:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        $redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] );
        wp_redirect( $redirect );
        exit;
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

注:を適切に使用するには、wp_redirect()通常exit;、2番目の例に追加したを追加する必要があります。


私は元のURLをキャッチし、彼がログインするとそこにユーザーをリダイレクトするためにいくつかの方法が必要にどんな意味がありません。つまり、リダイレクトニーズが家に行くために、罰金を働いている。
ハビエル・ビジャヌエバ

申し訳ありませんが、元々あなたの質問を誤解していた。ユースケースに対応できるように編集を追加しました。
チップベネット

4

すべての人に感謝しますが、私はみんなが推奨したものを少し使用したので、最終的に私のコードは次のようになります:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( get_option('home') . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

そしてログインフォームで(私は私のアプリケーションでログインフォームをハードコーディングしています@wsh_login_formについて私に知らせてくれてありがとう@Ashfame)

if (isset($_REQUEST['redirect_to'])){
    wp_redirect($_REQUEST['redirect_to']);
    // wp_redirect() does not exit automatically, and should almost always be followed by a call to exit;
    exit;

} else {
    wp_redirect(get_bloginfo('url') . '/groups/');
    exit;
}

あなたの助けに感謝します、私は皆に投票しました!


こんにちはJavier、これらの機能をどのファイルに追加しましたか?ありがとう。
タイラーダーデン

functions.php
ハビエルビジャヌエバ

4
exit()またはのdie()後に呼び出す必要がありますwp_redirect()。そうしないwp_redirect()と、後のコードが実行される可能性があり、バグやセキュリティの脆弱性につながる可能性があります。
イアン・ダン

2

これは、WPログインページに誘導するために人々を使用する私のコードです。その後、ログインすると、元の場所に戻りました。しかし、それはホームページではなく、カスタムログインを設定するワードプレスのログインページです。

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ?>

一緒に研究したいかもしれません。通常は、ユーザーの現在のURLを取得します$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]


0

ここでは、login_redirectフィルターフックがより完全で効果的なソリューションです。このようにして、ユーザーのレベルに応じて異なるリダイレクトパスを提供したり、ログイン時にエラーが発生した場合(つまり、不正なパスワード)にリダイレクトURLを維持したりできます。

function login_redirect( $redirect_to, $request, $user ){
  if(isset($_REQUEST['redirect_to'])){
    return $_REQUEST['redirect_to'];
  }
  return admin_url();
}
add_filter( 'login_redirect', 'login_redirect', 10, 3 );

function restrict_access_if_logged_out(){
  if (!is_user_logged_in() && !is_home()){
    $redirect = home_url() . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    wp_redirect( $redirect );
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

0

それはあなたの答えのどれもうまくいきませんでしたが、ほんの少しだけ追加して、うまくいきました!ここに私のコード:

function login_redirect( $redirect_to, $request, $user ){
  if(isset($_REQUEST['redirect_to'])){
    return $_REQUEST['redirect_to'];
  }
  return admin_url();
}
add_filter( 'login_redirect', 'login_redirect', 10, 3 );

function restrict_access_if_logged_out(){
  if (!is_user_logged_in() && !is_home()){
    $redirect = home_url() . '/wp-login.php?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]));
    wp_redirect( $redirect );
    exit;
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

/wp-login.php@Mattの応答と比較して追加したのは私だけですが、私にとっては重要でした。お役に立てば幸いです!:)

**編集:

HTTPSでnavegateにワードプレスを強制しているときにエラーを検出しました。リダイレクトはHTTPで行われるため、このメソッドは機能しません。問題を解決するために、機能を変更しました。これが結果です:

function restrict_access_if_logged_out(){
  global $wp;
  $protocol='http';
  if (isset($_SERVER['HTTPS']))
    if (strtoupper($_SERVER['HTTPS'])=='ON')
      $protocol='https';
  if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){
    $redirect = home_url() . "/wp-login.php?redirect_to= $protocol://" . $_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]);
    wp_redirect( $redirect );
    exit;
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

プロトコルを確認し、「esc_url」を削除して正しいプロトコルを追加しました$protocol://。また、私は変更しました""

私はこのページに基づいています


0

私はこれが非常に遅いことを知っていますが、将来の人々がこれを見つけて必要とする場合、これを正確に行う方法について投稿しました:

http://www.ryanprejean.com/force-login-with-redirect-and-exceptions/


このリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。回答方法をご覧ください。
ガブリエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.