ログインしていない訪問者を特定のページにアクセスしたときに自動的にリダイレクトするためにauth_redirect
を使用しようとしています。これが私が使うコードです:
add_action('template_redirect','wpse16975_check_if_logged_in');
function wpse16975_check_if_logged_in(){
$pageid = 29;
if(is_page($pageid)) auth_redirect();
}
リダイレクトは機能しますが(ログインページが表示されます)、ログインすると再びログインページが表示されます。ブラウザはログインページにリダイレクトし続けるため、保護されたページにアクセスする方法はありません。
私は この質問とその答え - を見ました @chrisguitarguyからとこれに私のコードを変更します。
add_action('template_redirect','wpse16975_check_if_logged_in');
function wpse16975_check_if_logged_in(){
$pageid = 29;
if(!is_user_logged_in() && is_page($pageid)) {
$url = add_query_arg(
'redirect_to',
get_permalink($pageid),
site_url('wp-login.php')
);
wp_redirect($url);
exit;
}
このコードは私の問題を解決しました:ログインしたユーザーは今ページにアクセスすることができます。問題は、なぜauth_redirect
を単純に使用できないのかということです。
問題は、この関数が通常バックエンドで使われるということです。フロントエンドで使用するには、以下のフィルタを追加する必要があります。
add_filter( 'auth_redirect_scheme', 'wpse16975_check_loggedin' );
function wpse16975_check_loggedin(){
return 'logged_in';
}
そうするとauth_redirect()
は期待通りに動くでしょう:ログインしていなければユーザーをログインフォームにリダイレクトします。
問題は、あなたは自分自身をループに陥らせることでした。あなたの元のコードブロックは、私がこのページを訪問したら、ログインページに私を送ると言った。ログインした後、それはページに戻りました、そしてあなたが今そのページを訪問しているので、ログインページに行きます。くるくる回る!
新しいブロックは最初にあなたがログインしているかどうかを確認します。そうでなければ、それからそしてそれからそしてそれはあなたが訪問しているページを見るためにそれを見ますか。あなたがログインしていない場合、あなたはそこに送られ、ログイン後に送り返されます。今、あなたはログインしているので、あなたはページを見ることができます。
理にかなって?
携帯電話でのみauth_redirect()に関する問題が発生しています。
4日後 - 私はうまくいく解決策を書きましたが、auth_redirectは必要ありません。
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );
if( !is_user_logged_in() ) { wp_redirect( home_url() . '/wp-login.php?redirect_to='. $current_url );