로그인하지 않은 사용자를 특정 페이지로 리디렉션하는 방법은 무엇입니까?


16

특정 페이지 / URL을 요청하는 로그되지 않은 사용자를 다른 페이지 / URL로 리디렉션하고 "멤버 전용"과 같은 메시지를 표시하는 방법 ! is_user_logged_in () 함수를 사용하여 코딩하는 것이 매우 쉽다는 것을 알고 있지만 WordPress에 초보자이기 때문에 코드를 작성하는 방법을 모르겠습니다. 코드를 넣을 파일을 알려주십시오.

답변:


30

다음은 특정 요구에 맞게 작동하도록 약간 수정해야하는 두 가지 예입니다.

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

여기가 아닌 URL의 페이지 ID 또는 슬러그를 사용 mydomain.com/participate의 codex.wordpress.org/Conditional_Tags을
브래드 달튼

is_page ( 'participate')
Brad Dalton

9

이것은 더 나을 것입니다 :

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이나 영구 링크를 반환하는 워드 프레스의 기능을 모른다. 그리고 dispaly 메시지에 대해서는 그대로 두십시오. 로그인하지 않고 특정 URL을 요청할 때 리디렉션하고 싶습니다.
user3187719

$ pagenow로 할 수 있습니까?
user3187719

@ user3187719는 내 원래 답변을 편집하고 솔루션을 리디렉션에 추가했습니다. 추신. $pagenow? 당신은 대포로 비행을 죽이려고 노력하고 있지만 왜 그렇게 복잡할까요? 간단하게 유지하십시오. PS2 : PHP와 WP Codex를 배우십시오.
보렉

4

특정 페이지로 리디렉션 할 수 없지만 로그인하지 않은 모든 사용자는 로그인 화면으로 리디렉션됩니다.

<?php auth_redirect(); ?>

워드 프레스 참조 : auth_redirect()

다른 해결책을 언급하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.