로그인하지 않고 다른 페이지에 액세스하려는 경우 사용자를 로그인 페이지 (홈)로 리디렉션하는 기능이 있습니다. 작동 방법은 다음과 같습니다.
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로 리디렉션해야한다는 것입니다.
이것을 할 수있는 방법이 있습니까? 미리 감사드립니다!
답변
쉽게 할 수 있습니다. 리디렉션 매개 변수 만 지정하면됩니다. 홈페이지에서 로그인 링크를 사용하여 로그인 페이지로 이동하면 @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;
.
답변
고마워, 나는 모든 사람들이 권장하는 약간의 비트를 사용했다.
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에 대해 알려 주신 @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;
}
도와 주셔서 감사합니다. 모두 투표했습니다!
답변
이것은 사람들을 사용하여 wp 로그인 페이지로 안내하는 코드입니다. 그런 다음 로그인하면 원래 위치로 돌아 왔습니다. 그러나 그것은 홈 페이지가 아니라 사용자 정의 로그인을 설정하는 워드 프레스 로그인 페이지입니다.
<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ?>
연구하고 싶을 수도 있습니다. 일반적으로 다음과 같은 방법으로 사용자의 현재 URL을 얻습니다.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]
답변
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 );
답변
그것은 당신의 대답 중 어느 것도 효과가 없지만 약간만 추가하면 효과가 있습니다! 여기 내 코드 :
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에서 탐색하기 위해 워드 프레스를 사용할 때 오류가 감지되었습니다. 리디렉션이 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/