जांचें कि क्या wp-login वर्तमान पृष्ठ है


48

यदि वर्तमान पृष्ठ wp-login.phpया है तो मैं कैसे जांच सकता हूं wp-signup.php?

उपयोग करने से अधिक सुरुचिपूर्ण समाधान हैं $_SERVER['REQUEST_URI']?


1
संदर्भ के लिए यहाँ संबंधित trac चर्चा है core.trac.wordpress.org/ticket/19898
स्टीफन हैरिस

जवाबों:


59

उस वैश्विक का उपयोग करें $pagenow, जो रनटाइम में वर्डप्रेस द्वारा एक आम वैश्विक सेट है:

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 बदलता है?
लुकास Bustamante

@LucasBustamante से अच्छा सवाल है और मुझे लगता है कि यह आसानी से परखा हुआ है। किसी के समय को इंगित करना और सहेजना बहुत महत्वपूर्ण है।
रयान बेने

1
@ T.Todua ने नीचे एक सुरक्षित और अधिक विश्वसनीय उत्तर प्रदान किया है ।
mopsyd

मेरे लिए भी 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) का उपयोग करके लॉगिन पृष्ठ की जांच करने का प्रयास करते हैं, तो आपको INCORRECT VALUES मिलेंगे, क्योंकि कई प्लगइन्स लोगिन और ADMIN यूआरएल बदलते हैं ।
2) $pagenowआपको उस मामले में भी गलत मूल्य देगा!

टिप्पणियाँ:

  • कुछ मामलों में, यदि आप लॉगिन-फॉर्म (यानी शोर्ट या आदि के साथ) मैन्युअल रूप से अन्य टेम्पलेट फ़ाइलों / पृष्ठों पर आउटपुट करते हैं तो यह काम नहीं कर सकता है।

2
यह शानदार है। किसी विज़िटर स्थान को निर्धारित करने के लिए शामिल फ़ाइलों का उपयोग करना एक ऐसा परिदृश्य नहीं है जिसे मैंने कभी खुद को करते हुए पाया है, लेकिन यह इस मामले में समझ में आता है।
रयान बेयेन

@RyanBayne thnx, हाँ, यह दुर्लभ अवसर है जब get_included_files()सबसे सटीक समाधान लगता है (मेरे लिए कम से कम)।
टोडुआ

मेरे लिए यह गलत है, जैसे कि यह कोई wp-login पेज नहीं था ... $ भी $ GLOBALS ['pagenow'] रिटर्न index.php ...
4

@trainoasis शायद आप मुखपृष्ठ पर या उस तरह मैनुअल लॉगिन-फॉर्म (जैसे शोर्ट) का उपयोग कर रहे हैं?
टोडुआ

नहीं, सामान्य wp-login.php :) लेकिन मैं ऋषि और WooCommerce का उपयोग कर रहा हूं, हो सकता है कि वह किसी तरह चीजों को बदल दे :)
ट्रैविनासिस

3

ऐसा करने के लिए और अधिक आधुनिक तरीका, यह तब भी काम करना चाहिए जब wp-login URL प्लगइन्स द्वारा बदल दिया जाए और जब WP किसी सबफ़ोल्डर में हो, आदि:

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

1
मैं सुझाव देने जा रहा था कि हो सकता है कि ओपी को वेब पथ की तुलना में wp_login_url () और oly से परिणामों को पार्स करने की आवश्यकता हो।
स्वेतोस्लाव मारिनोव

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.
}

और यदि आपका वर्डप्रेस वेब रूट फ़ोल्डर में स्थापित नहीं है, तो आपको कुछ पैराम्स का उपयोग करना चाहिए, जैसे YOUR_WP_PATH/wp-login.phpतत्वों को एरे में बदलना।


1

मैंने इसे वर्डप्रेस के ही 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 );
}

बस दोनों रास्तों की तुलना करना (क्योंकि एसएसएल के उपयोग के बारे में पूरी तरह से सुनिश्चित होना मुश्किल है क्योंकि इसे समाप्त किया जा सकता है) पर्याप्त होना चाहिए ... इसका मतलब यह है, हालांकि, एक प्लगइन या थीम डेवलपर जो डिफ़ॉल्ट लॉगिन फ़ॉर्म को बदलता है, उसे अवश्य किया जाना चाहिए। तो उचित तरीका ...


Url params को अनदेखा करने के लिए, अंतिम पंक्ति को इसमें बदलें: रिटर्न रूट (rtrim (strtolower ($ _SERVER ['REQUEST_URI']), '/'), 0, strlen ($ login_path)) == $ login_path;
मट्टावतार

0

मुझे केवल रजिस्टर पेज में ही दिलचस्पी है, लॉगिन पेज में नहीं। इसलिए यह हर कोई नहीं चाहता है।

$ GLOBALS [ow pagenow ’] मेरे लिए index.php लौटाता है। शायद दोस्त या मेरे विषय के कारण।

इसलिए मैंने इस्तेमाल किया

is_page('register')

यदि आप पंजीकरण पृष्ठ के निकाय का निरीक्षण करते हैं, तो इसके साथ ही आईडी भी है, इसलिए यदि यह पेज-आईडी-4906 कहता है, तो आप इसे इस तरह से उपयोग कर सकते हैं यदि यह बेहतर काम करता है:

is_page('4906')

2
यह केवल तभी मान्य है जब कोई प्लगइन डिफ़ॉल्ट लॉगिन को संशोधित कर रहा है।
माइकल Ecklund

0

वर्तमान उत्तरों में से किसी ने भी मेरे लिए काम नहीं किया।

मैंने जो किया है वह जाँच रहा था कि क्या $_GETसरणी में 'पृष्ठ' कुंजी है और यदि उसका मान 'साइन-इन' है।

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

-1

यहां प्रस्तावित कुछ समाधानों ने काम किया है, इसलिए मैं वास्तव में कुछ सरल के साथ आया हूं जो एक साधारण वर्डप्रेस साइट पर काम करता है (मल्टीसाइट पर परीक्षण नहीं किया गया है)।

की तरह सरल:

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

यह url पैरामीटर को ध्यान में रखता है ?action=register, जो केवल तब होता है जब आप पंजीकरण पृष्ठ पर होते हैं।


2
यह निश्चित रूप से एक अच्छा समाधान नहीं है, आपके कस्टम पेज टेम्प्लेट या प्लगइन्स में कहीं भी "एक्शन" पैरामीटर हो सकता है, नहीं? :)
ट्रैनोसैसिस

वास्तव में। यह फ़ाइलों की गणना करते समय या लॉगिन पृष्ठ पर सरल टेम्पलेट फ़ंक्शंस प्रदर्शन करते समय एक साधारण जाँच के लिए काम कर सकता है, लेकिन यह सुनिश्चित करने के लिए सुरक्षित तरीके हैं।
एड्रियानो मोनेची

-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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.