ডাব্লুপি-লগইন বর্তমান পৃষ্ঠা কিনা তা পরীক্ষা করুন


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 পরিবর্তন করে তবে এটি কাজ করে?
লুকাস বুস্তামন্তে

@ লুকাসবুস্তাম্যান্টের কাছ থেকে ভাল প্রশ্ন এবং আমি মনে করি এটি সহজে পরীক্ষা করা হয়েছে। কারও সময় চিহ্নিত করা এবং সময় বাঁচানো খুব গুরুত্বপূর্ণ।
রায়ান বায়েন

1
@ টি টিডুয়া নীচে একটি নিরাপদ এবং আরও নির্ভরযোগ্য উত্তর সরবরাহ করেছে ।
মোপসিড

আমার জন্য এমনকি পেজনোও বলেছেন এটি সূচি.পিএফ ...
ট্রিনোসিস

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) ব্যবহার করে লগইন পৃষ্ঠাটি চেক করার চেষ্টা করেন তবে আপনি সঠিক মূল্যগুলি পাবেন, কারণ অনেক প্লাগইন লোগিন এবং অ্যাডমিন url পরিবর্তন করে ।
2) $pagenowসেই ক্ষেত্রে আপনাকেও ভুল মান দেবে!

নোট:

  • কিছু ক্ষেত্রে, আপনি যদি অন্য টেম্পলেট ফাইল / পৃষ্ঠাগুলিতে ম্যানুয়ালি লগইন-ফর্ম (যেমন শর্টকোড বা ইত্যাদি সহ) আউটপুট নেন তবে এটি কাজ নাও করতে পারে।

2
এটি চমৎকার. দর্শকের অবস্থান নির্ধারণের জন্য অন্তর্ভুক্ত ফাইলগুলি ব্যবহার করা এমন পরিস্থিতি নয় যা আমি নিজে কখনও করে দেখলাম তবে এটি এই ক্ষেত্রে বোধগম্য।
রায়ান বায়েন

@ রায়ানবায়ে থানেক্স, হ্যাঁ, এটি সবচেয়ে বিরল ঘটনা যখন get_included_files()সর্বাধিক সঠিক সমাধান বলে মনে হয় (পাছে আমার জন্য)।
টুডো

আমার জন্য তা মিথ্যা ফেরৎ, যেমন যদি এটি একটি WP-লগইন পৃষ্ঠায় ছিল না ... এছাড়াও এমনকি $ GLOBALS [ 'pagenow'] আয় index.php ...
trainoasis

@ ট্রেইনোয়াসিস সম্ভবত আপনি হোমপেজে ম্যানুয়াল লগইন-ফর্ম (শর্টকোডের মতো) ব্যবহার করছেন বা এর মতো?
টুডো

না, সাধারন wp-login.php :) তবে আমি সেজ এবং WooCommerce ব্যবহার করছি, সম্ভবত এটি
কিছুটা

3

এটি করার আরও আধুনিক উপায়, ডাব্লুপি-লগইন ইউআরএল প্লাগইনগুলির মাধ্যমে পরিবর্তিত হওয়া এবং ডাব্লুপি যখন সাবফোল্ডার ইত্যাদিতে থাকে তখনও এটি কাজ করা উচিত:

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

1
আমি যে পরামর্শ দিতে যাচ্ছি। হতে পারে ওপিকে ডাব্লুপি_লগিন_আরল () থেকে ফলাফলগুলি বিশ্লেষণের প্রয়োজন এবং ওয়েব পথের তুলনা করে oly।
স্বেটোস্লাভ মেরিনভ

1
আমার এই উত্তরটি সবচেয়ে ভাল লেগেছে। আমার পছন্দগুলি মাপসই, আমি এটা সামান্য করতে tweaked: 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 );
}

কেবলমাত্র উভয় পাথের তুলনা করা (কারণ এটি এসএমএসের ব্যবহার সম্পর্কে একেবারে নিশ্চিত হওয়া শক্ত কারণ এটি সমাপ্ত হতে পারে) যথেষ্ট হওয়া উচিত ... তবে এর অর্থ এই নয় যে ডিফল্ট লগইন ফর্মটি পরিবর্তন করে এমন একটি প্লাগইন বা থিম বিকাশকারী অবশ্যই করেছে সুতরাং সঠিক উপায় ...


ইউআরএল প্যারামগুলি উপেক্ষা করতে, সর্বশেষ লাইনটি এতে পরিবর্তন করুন: রিটার্ন সাবস্ট্র্র্ট (rtrim (স্ট্র্টলওয়ার ($ _SERVER ['REQUEST_URI'])), '/'), 0, স্ট্রেলেন ($ লগইন_পথ) == $ লগইন_পথ;
মত্তাভাটার

0

আমি কেবল নিবন্ধভুক্ত পৃষ্ঠায় আগ্রহী, লগইন পৃষ্ঠায় নয়। সুতরাং এটি প্রত্যেকের দ্বারা পছন্দ করা যাবে না।

LO বিশ্বব্যাপী ['পেজনো'] আমার জন্য সূচি.পি.পি. প্রদান করে। হয়তোবা বডপ্রেস বা আমার থিমের কারণে।

সুতরাং আমি ব্যবহার

is_page('register')

আপনি যদি নিবন্ধের পৃষ্ঠার বডিটি পরীক্ষা করেন তবে এর আইডিও রয়েছে , তাই যদি এটি পৃষ্ঠা-আইডি -4906 বলে , এটি আরও ভাল কাজ করে যদি আপনি এটি এইভাবে ব্যবহার করতে পারেন:

is_page('4906')

2
এটি কেবলমাত্র বৈধ যদি কোনও প্লাগইন ডিফল্ট লগইনটি পরিবর্তন করে।
মাইকেল একলুন্ড

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

এটি ইউআরএল প্যারামিটার বিবেচনায় নেয় ?action=register, যা কেবলমাত্র যখন আপনি নিবন্ধকরণ পৃষ্ঠায় থাকবেন তখনই উপস্থিত থাকে।


2
এটি অবশ্যই একটি ভাল সমাধান নয়, আপনার কাস্টম পৃষ্ঠার টেম্পলেট বা প্লাগইনগুলির যে কোনও জায়গায় আপনার "ক্রিয়া" পরামিতি থাকতে পারে, না? :)
ট্রেইনোসিস

প্রকৃতপক্ষে. লগইন পৃষ্ঠায় ফাইলগুলি উত্সাহ দেওয়ার সময় বা সরল টেম্পলেট ফাংশনগুলি সম্পাদন করার সময় এটি একটি সাধারণ চেকের জন্য কাজ করতে পারে তবে এটি অর্জনের নিরাপদ উপায় রয়েছে তা নিশ্চিতভাবে।
অ্যাড্রিয়ানো মোনচিচি

-1

এখানে @ টি.ডি.উডুয়া উত্তরের পিএসআর -২ সংস্করণ রয়েছে। আমি কেবল এটি সুন্দরভাবে ফর্ম্যাট করেছি। ফাংশনটি পরিচালনা করা যেমন পরীক্ষার উদ্দেশ্যে ফিল্টার যুক্ত করা ইত্যাদির জন্য এটি আরও ভাল:

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.