wp-login이 현재 페이지인지 확인


답변:


59

$pagenow런타임시 WordPress에서 공통으로 설정 한 global을 사용하십시오 .

if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
    // We're on the login page!
}

로그인 페이지 유형 ( 예 : 등록)을 확인할 수도 있습니다 .

if ( $GLOBALS['pagenow'] === 'wp-login.php' && ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
    // We're registering
}

다음 코드는 레거시로 간주되어 사용해서는 안됩니다 ( wp-register.php더 이상 사용되지 않으며 그 후 꽤 오랫동안 제거되었습니다).

if ( in_array( $GLOBALS['pagenow'], array( 'wp-login.php', 'wp-register.php' ) ) )
    run_my_funky_plugin();


3
사용자가 wp-login.php URL을 변경하면 작동합니까?
Lucas Bustamante

@LucasBustamante의 좋은 질문이며 쉽게 테스트했다고 가정합니다. 누군가를 지적하고 시간을 절약하는 것이 매우 중요합니다.
Ryan Bayne

1
@ T.Todua는 아래에 보다 안전하고 신뢰할 수있는 답변을 제공했습니다 .

나에게 pagenow조차 index.php라고 말합니다 ...
trainoasis

17

신뢰할 수있는 유일한 방법 :

if( is_wplogin() ){
   ...
}

암호:

function is_wplogin(){
    $ABSPATH_MY = str_replace(array('\\','/'), DIRECTORY_SEPARATOR, ABSPATH);
    return ((in_array($ABSPATH_MY.'wp-login.php', get_included_files()) || in_array($ABSPATH_MY.'wp-register.php', get_included_files()) ) || (isset($_GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'wp-login.php') || $_SERVER['PHP_SELF']== '/wp-login.php');
}

왜 가장 안전한가요?

1) 때로는 REQUEST_URI(또는 SCRIPT_PATH)를 사용하여 로그인 페이지를 확인하려고하면 많은 플러그인이 LOGIN & ADMIN URL을 변경하기 때문에 INCORRECT VALUES가 표시됩니다 .
2) $pagenow이 경우 잘못된 값을 줄 것입니다!

노트:

  • 경우에 따라 다른 템플릿 파일 / 페이지에서 로그인 양식 (예 : 단축 코드 등)을 수동으로 출력하면 작동하지 않을 수 있습니다.

2
이건 끝내줘. 포함 된 파일을 사용하여 방문자 위치를 결정하는 것은 내가 찾은 시나리오가 아니지만이 경우에는 의미가 있습니다.
Ryan Bayne

@RyanBayne thnx, 그렇습니다. get_included_files()가장 정확한 솔루션 인 것처럼 보이지 않는 드문 경우 입니다.
T.Todua

나를 위해 그것은 wp- 로그인 페이지가 아닌 것처럼 거짓을 반환합니다 ... 또한 $ GLOBALS [ 'pagenow']도 index.php를 반환합니다 ...
trainoasis

@trainoasis 아마 당신은 홈페이지 또는 그와 같은 수동 로그인 양식 (예 : 단축 코드)을 사용하고 있습니까?
T.Todua

아니, 보통 WP-login.php :)하지만 어쩌면 그 변경 일 어떻게 든 : 세이지와 WooCommerce를 사용하고
trainoasis

3

더 현대적인 방법은 플러그인에 의해 wp-login URL이 변경되고 WP가 하위 폴더에있는 경우에도 작동합니다.

if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
    /* ... */
}

1
나는 그것을 제안하려고했다. OP는 wp_login_url ()의 결과를 구문 분석하고 웹 경로를 비교해야 할 수도 있습니다.
Svetoslav Marinov

1
이 답변이 가장 좋습니다. 선호도에 맞추기 위해 다음과 같이 약간 조정했습니다 return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );. 그것은 조금 더 깨끗하다고 ​​느낍니다.
이언 던

2

$GLOBALS['pagenow']작동하지 않으면를 사용하십시오 $_SERVER['PHP_SELF'].

if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
    // do something.
}

그리고 WordPress가 웹 루트 폴더에 설치되어 있지 않으면 YOUR_WP_PATH/wp-login.php배열의 요소를 바꾸는 것과 같은 일부 매개 변수를 사용해야합니다 .


1

다음과 같이 WordPress 자체 wp_login_url () 메소드를 사용하여 구현했습니다.

public static function is_wp_login() {
  $login_path = rtrim( strtolower( parse_url( wp_login_url( '', true ), PHP_URL_PATH ) ), '/' );
  return ( rtrim( strtolower( $_SERVER[ 'REQUEST_URI' ] ), '/' ) == $login_path );
}

두 경로를 비교하면 (종료 될 때 SSL 사용에 대해 절대 확신하기 어렵 기 때문에) 충분해야합니다 ... 그러나 기본 로그인 양식을 변경하는 플러그인 또는 테마 개발자가 수행해야한다는 것을 의미합니다 올바른 방법으로 ...


URL 매개 변수를 무시하려면 마지막 줄을 다음과 같이 변경하십시오. return substr (rtrim (strtolower ($ _SERVER [ 'REQUEST_URI']), '/'), 0, strlen ($ login_path)) == $ login_path;
mattavatar

0

로그인 페이지가 아닌 등록 페이지에만 관심이 있습니다. 따라서 모든 사람이 원하지 않을 수도 있습니다.

$ GLOBALS [ 'pagenow']는 나를 위해 index.php를 반환합니다. 아마도 buddypress 또는 내 테마 때문일 수 있습니다.

그래서 나는

is_page('register')

등록 페이지의 본문을 검사하면 ID도 포함되므로 page-id-4906 이면 더 잘 작동하면 다음과 같이 사용할 수 있습니다.

is_page('4906')

2
플러그인이 기본 로그인을 수정하는 경우에만 유효합니다.
Michael Ecklund

0

현재 답변 중 어느 것도 나를 위해 일하지 않았습니다.

내가 한 것은 $_GET배열에 '페이지'키가 있고 그 값이 '로그인'인지 확인하는 것입니다.

if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
   // you're on login page
}

-1

여기에 제안 된 몇 가지 솔루션이 효과가 있었으므로 일반적인 WordPress 사이트 (멀티 사이트에서는 테스트되지 않음)에서 작동하는 간단한 것이 있습니다.

다음과 같이 간단합니다.

    if( !isset($_GET['action']) ){
        echo 'This is the Login Page.';
    } else { 
        echo 'This is the Register Page.';
    }

?action=register등록 페이지에있을 때만 존재 하는 url 매개 변수를 고려합니다 .


2
확실히 좋은 해결책은 아닙니다. 사용자 정의 페이지 템플릿 또는 플러그인의 어느 곳에 나 "action"매개 변수를 가질 수 있습니다. :)
trainoasis

과연. 로그인 페이지에서 파일을 대기열에 넣거나 간단한 템플릿 기능을 수행하는 동안 간단한 확인이 가능할 수 있지만이를 달성하는 더 안전한 방법이 있습니다.
Adriano Monecchi

-1

@ T.Todua 답변의 PSR-2 버전은 다음과 같습니다. 방금 멋지게 포맷했습니다. 테스트 목적으로 필터를 추가하는 등의 기능을 조작하는 것이 좋습니다.

function isLoginPage()
{
    $is_login_page = false;

    $ABSPATH_MY = str_replace(array('\\', '/'), DIRECTORY_SEPARATOR, ABSPATH);

    // Was wp-login.php or wp-register.php included during this execution?
    if (
        in_array($ABSPATH_MY . 'wp-login.php', get_included_files()) ||
        in_array($ABSPATH_MY . 'wp-register.php', get_included_files())
    ) {
        $is_login_page = true;
    }

    // $GLOBALS['pagenow'] is equal to "wp-login.php"?
    if (isset($GLOBALS['pagenow']) && $GLOBALS['pagenow'] === 'wp-login.php') {
        $is_login_page = true;
    }

    // $_SERVER['PHP_SELF'] is equal to "/wp-login.php"?
    if ($_SERVER['PHP_SELF'] == '/wp-login.php') {
        $is_login_page = true;
    }

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