Wp-login'nin geçerli sayfa olup olmadığını kontrol edin


Yanıtlar:


59

Çalışma $pagenowzamanında WordPress tarafından ayarlanan genel bir genel olan genel olanını kullanın:

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

Giriş sayfası türünü de kontrol edebilirsiniz , örneğin kayıt:

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

Aşağıdaki kod eski olarak kabul edilir ve kullanılmamalıdır ( wp-register.phpkullanımdan kaldırıldı ve daha sonra bir süre önce kaldırıldı):

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


3
Kullanıcı wp-login.php URL'sini değiştirdiğinde çalışır mı?
Lucas Bustamante

@LucasBustamante'den güzel bir soru ve sanırım kolayca test edildi. Sadece birisini işaret etmek ve zaman kazanmak için çok önemlidir.
Ryan Bayne

1
T.Todua @ daha güvenli ve daha güvenilir bir cevap sağlamıştır aşağıda .
mopsyd

Benim için bile pagenow ... o index.php diyor
trainoasis

17

SADECE GÜVENİLİR YOL:

if( is_wplogin() ){
   ...
}

kod:

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');
}

Neden en güvenli?

1) Bazen, REQUEST_URI(veya SCRIPT_PATH) ' yı kullanarak giriş sayfasını kontrol etmeye çalışırsanız , YANLIŞ DEĞERLER alırsınız, çünkü birçok eklenti GİRİŞ ve ADMIN URL'lerini değiştirir .
2) $pagenowbu durumda da size yanlış değer verecektir!

Notlar:

  • Bazı durumlarda, oturum açma formunu (ör. Kısa kod vb. İle) diğer şablon dosyalarına / sayfalara manuel olarak çıkarmanız işe yaramayabilir.

2
Bu fantastik. Bir ziyaretçinin yerini belirlemek için dahil edilen dosyaları kullanmak, kendimi yaparken bulduğum bir senaryo değil, ancak bu durumda mantıklı geliyor.
Ryan Bayne

@RyanBayne thnx, evet, bu get_included_files()en doğru çözüm (benim için en azından) göründüğü zaman nadir bir durumdur .
T.Todua

O ... Bir wp-giriş sayfası değilmiş gibi Benim için o, false döndürür Ayrıca bile $ GLOBALS [ 'pagenow'] döner index.php ...
trainoasis

@ trainoasis muhtemelen ana sayfada veya aynı şekilde manuel oturum açma formunu (kısa kod gibi) kullanıyor musunuz?
T.Todua

Hayır, normal bir wp-login.php :) Ama belki bu değişiklikler şeyler nasılsa :) Sage ve WooCommerce, kullanıyorum
trainoasis

3

Bunu yapmanın daha modern yolu, wp-login URL'si eklentiler tarafından değiştirilirken ve WP bir alt klasördeyken bile çalışmalıdır.

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

1
Bunu önerecektim. Belki de OP'nin wp_login_url () sonuçlarını çözümlemesi ve web yolunu karşılaştırması gerekir.
Svetoslav Marinov

1
Bu cevabı en çok sevdim. Tercihlerimi sığdırmak için, ben biraz tweaked: return false !== stripos( wp_login_url(), $_SERVER['SCRIPT_NAME'] );. Bu bana biraz daha temiz geliyor.
Ian Dunn

2

$GLOBALS['pagenow']çalışmıyor, kullan $_SERVER['PHP_SELF'].

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

WordPress web kök klasöründe yüklü değilse YOUR_WP_PATH/wp-login.php, dizideki elemanları değiştirmek gibi bazı parameller kullanmalısınız .


1

Aşağıdaki WordPress own wp_login_url () metodunu kullanarak uyguladım:

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 );
}

Sadece iki yolu karşılaştırmak (sonlandırılabileceği için SSL kullanımı konusunda kesinlikle emin olmak zor olduğundan) yeterli olmalı ... Ancak, varsayılan giriş formunu değiştiren bir eklenti veya tema geliştiricisinin yapmış olması gerektiği anlamına gelir. öyleyse doğru yol ...


URL paramlarını yoksaymak için son satırı şu şekilde değiştirin: return substr (rtrim (strtolower ($ _SERVER ['REQUEST_URI'])), '/'), 0, strlen ($ login_path)) == $ login_path;
mattavatar

0

Giriş sayfasına değil sadece kayıt sayfasına ilgi duyuyorum. Yani bu herkes tarafından istenmeyebilir.

$ GLOBALS ['pagenow'] benim için index.php döndürür. Belki de dostum veya temam yüzünden.

Bu yüzden kullandım

is_page('register')

Kayıt sayfasının gövdesini denetlerseniz , ayrıca kimliği de vardır, bu nedenle sayfa-id-4906 yazıyorsa, daha iyi çalışıyorsa bu şekilde kullanabilirsiniz:

is_page('4906')

2
Bu, yalnızca bir eklenti varsayılan giriş bilgilerini değiştiriyorsa geçerlidir.
Michael Ecklund

0

Mevcut cevapların hiçbiri benim için çalıştı.

Yaptığım şey $_GETdizinin bir 'page' anahtarına sahip olup olmadığını ve değeri 'sign-in' olup olmadığını kontrol etmekti .

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

-1

Burada önerilen birkaç çözüm işe yaradı, bu yüzden sıradan bir WordPress sitesinde (Multisite'da test edilmemiş) çalışan çok basit bir şeyle geldim.

Kadar basit:

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

Sadece ?action=registerkayıt sayfasında olduğunuzda var olan url parametresini dikkate alır .


2
Bu kesinlikle iyi bir çözüm değil, özel sayfa şablonlarınızda veya eklentilerinizde herhangi bir yerde "action" parametresi olabilir, değil mi? :)
trainoasis

Aslında. Giriş sayfasındaki dosyaları sıkıştırırken veya basit şablon işlevlerini gerçekleştirirken basit bir kontrol için işe yarayabilir, ancak kesin olarak bunu başarmanın daha güvenli yolları vardır.
Adriano Monecchi

-1

İşte @ T.Todua cevabının PSR-2 versiyonu. Sadece güzelce biçimlendirdim. Bu, sınama amacıyla bir filtre ekleme gibi, işlevi işlemek için daha iyidir:

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.