ログインせずに他のページにアクセスしようとしている場合、ユーザーをログインページ(ホーム)にリダイレクトする機能があります。これがどのように機能するのかを示します。
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にリダイレクトする必要があることです。
これを行う方法はありますか?前もって感謝します!
皆さん、どうもありがとうございました。結局、私のコードは次のようになります。
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 );
そして私のログインフォームで(私は自分のログインフォームを私はそれが存在することを知らなかったwp_login_formについて私に知らせるために私のアプリケーションのおかげで私のログインフォームをハードコーディングしています)
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;
}
どうもありがとうございました、私はみんなに投票しました!
簡単にできます。リダイレクトパラメータを指定するだけです。あなたがログインページに行くためにホームページのログインリンクを使っているならば、それから@ 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 );
?>
あなたが持っているか必要なものに従って他のパラメータを変更してください。
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番目の例に追加しました。
これは私がWPのログインページに誘導するために人々を使用する私のコードです。それからログインしたとき彼らは彼らがいた場所に戻った。しかし、それはホームページではなく、私がカスタムログインを設定するwordpressログインページです。
<?php echo wp_login_url( $_SERVER["HTTP_Host"] . $_SERVER["REQUEST_URI"]) ?>
あなたは一緒に研究したいと思うかもしれません。通常、$_SERVER["HTTP_Host"] . $_SERVER["REQUEST_URI"]
によってユーザーの現在の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() . '/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 );
@ Mattの返答と比較して/wp-login.php
を追加したのは私だけですが、私にとっては鍵となっています。それが役立つことを願っています! :)
**編集:
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://
を追加しました。また、私は""
を変更しました。
このページ をベースにしています。
私はこれが非常に遅いことを知っています、しかし私は将来の誰かがこれを見つけて、それを必要とするならば、これを正確に行う方法について投稿をしました:
http://www.ryanprejean.com/force-login-with-redirect-and-exceptions/ /
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 );