답변:
$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();
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
이 경우 잘못된 값을 줄 것입니다!
get_included_files()
가장 정확한 솔루션 인 것처럼 보이지 않는 드문 경우 입니다.
더 현대적인 방법은 플러그인에 의해 wp-login URL이 변경되고 WP가 하위 폴더에있는 경우에도 작동합니다.
if(stripos($_SERVER["SCRIPT_NAME"], strrchr(wp_login_url(), '/')) !== false){
/* ... */
}
return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );
. 그것은 조금 더 깨끗하다고 느낍니다.
다음과 같이 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 사용에 대해 절대 확신하기 어렵 기 때문에) 충분해야합니다 ... 그러나 기본 로그인 양식을 변경하는 플러그인 또는 테마 개발자가 수행해야한다는 것을 의미합니다 올바른 방법으로 ...
로그인 페이지가 아닌 등록 페이지에만 관심이 있습니다. 따라서 모든 사람이 원하지 않을 수도 있습니다.
$ GLOBALS [ 'pagenow']는 나를 위해 index.php를 반환합니다. 아마도 buddypress 또는 내 테마 때문일 수 있습니다.
그래서 나는
is_page('register')
등록 페이지의 본문을 검사하면 ID도 포함되므로 page-id-4906 이면 더 잘 작동하면 다음과 같이 사용할 수 있습니다.
is_page('4906')
현재 답변 중 어느 것도 나를 위해 일하지 않았습니다.
내가 한 것은 $_GET
배열에 '페이지'키가 있고 그 값이 '로그인'인지 확인하는 것입니다.
if (isset($_GET['page']) && $_GET['page'] == 'sign-in'){
// you're on login page
}
여기에 제안 된 몇 가지 솔루션이 효과가 있었으므로 일반적인 WordPress 사이트 (멀티 사이트에서는 테스트되지 않음)에서 작동하는 간단한 것이 있습니다.
다음과 같이 간단합니다.
if( !isset($_GET['action']) ){
echo 'This is the Login Page.';
} else {
echo 'This is the Register Page.';
}
?action=register
등록 페이지에있을 때만 존재 하는 url 매개 변수를 고려합니다 .
@ 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;
}