जांचें कि क्या उपयोगकर्ता JQuery का उपयोग करने में लॉग इन है


18

मैं कस्टम jquery कोड निष्पादित करना चाहता हूं जो उपयोगकर्ता को लॉगिन संवाद दिखाता है यदि वह एक बटन क्लिक करता है और वह लॉग इन नहीं है। मैं यह कैसे कर सकता हूं?

जवाबों:


27

यदि आप जानना चाहते हैं कि उपयोगकर्ता वर्तमान समय में लॉग इन है या नहीं। अन्य उत्तर यह जाँचते हैं कि उपयोगकर्ता लॉग इन है या नहीं जब पृष्ठ लोड नहीं हो रहा है जब आप जावास्क्रिप्ट चला रहे हों। उपयोगकर्ता उदाहरण के लिए एक अलग टैब में लॉग इन कर सकता है

इसे अपनी जावास्क्रिप्ट में रखें

var data = {
    action: 'is_user_logged_in'
};

jQuery.post(ajaxurl, data, function(response) {
    if(response == 'yes') {
        // user is logged in, do your stuff here
    } else {
        // user is not logged in, show login form here
    }
});

इसे अपने कार्यों में लगाएं

function ajax_check_user_logged_in() {
    echo is_user_logged_in()?'yes':'no';
    die();
}
add_action('wp_ajax_is_user_logged_in', 'ajax_check_user_logged_in');
add_action('wp_ajax_nopriv_is_user_logged_in', 'ajax_check_user_logged_in');

अजाक्सुरल का मूल्य क्या है?
फारेस ओडेह

वर्डप्रेस इसे 'yourite.com/wp-admin/admin-ajax.php' पर सेट करता है। यह url है जिस पर सभी अजाक्स अनुरोध भेजे जाने हैं
मृदुल अग्रवाल

मैं jQuery.post को jquery क्लिक हैंडलर के अंदर रखता हूं लेकिन यह काम नहीं करता है। क्या आपके पास इसका कोई हल है?
फरेस अवध

मैंने देखा कि अजाक्सुरल कंसोल में परिभाषित नहीं है।
फेरेस ओदेह

1
[codex] (codex.wordpress.org/AJAX_in_Plugins) ने कहा कि नवीनतम वर्डप्रेस संस्करणों में यह पहले से ही परिभाषित है। शायद आप ajaxurl के अपने संस्करण को wp_localize_script के साथ परिभाषित कर सकते हैं
मृदुल अग्रवाल

32

इसके लिए classविशेषता की जाँच करें body: यदि विषय का उपयोग body_class()किया जा रहा है तो शरीर में logged-inलॉग इन करने वाले उपयोगकर्ताओं के लिए एक वर्ग है। ज्ञात हो कि फ़ंक्शन का उपयोग तत्व पर htmlभी किया जा सकता है।

उदाहरण

if(jQuery('body').hasClass('logged-in')){
    // Do something
}

आप is_user_logged_in()स्क्रिप्ट को प्रिंट या प्रिंट करने के लिए एक शर्त के रूप में भी उपयोग कर सकते हैं ।


इस उत्तर के लिए शीर्ष अंक - सरल और प्रभावी।
क्यू स्टूडियो

मुझे logged-inकक्षा के लिए सिर्फ शरीर की जांच करने का विचार पसंद है । बस यह सुनिश्चित करना होगा कि थीम उपयोग करें body_class();या get_body_class();अन्यथा, यह एक सुपर विश्वसनीय समाधान नहीं है। हालांकि, मैं अपने विषयों में उन कार्यों का उपयोग करता हूं, इसलिए यह मेरे लिए एक अच्छा समाधान है। सरल विचार के लिए धन्यवाद।
माइकल एक्लंड

18

कृपया अपने html शरीर में body_class () जोड़ें

<body <?php body_class(); ?>>
   //your html code
</body>

यह logged-inलॉग किए गए उपयोगकर्ता के लिए जोड़ देगा तब आप केवल कस्टम उपयोगकर्ता के लिए अपने कस्टम जुकरी कोड को निष्पादित करने के लिए निम्नलिखित jquery कोड का उपयोग कर सकते हैं।

if ($('body').hasClass('logged-in')) {
       //execute your jquery code.
}

मुझे पता नहीं क्यों यह एक नीचे मतदान किया गया था। दृष्टिकोण पूरी तरह से मान्य है। +1
केसर

मुझे नहीं पता। मेरा एक ही सवाल है। उत्तर मान्य है लेकिन वोट डाउन क्यों है।
मोनिरुल इस्लाम

हम्म। हो सकता है क्योंकि यह सही तरीके के बजाय jQuery का उपयोग करता है (एक फिल्टर और कॉलबैक का उपयोग करके)। कुछ लोगों को jQuery से एलर्जी है।
कैसर

1
अच्छा है, लेकिन अगर आप पेज कैश सक्षम के साथ एक कैशिंग प्लगइन का उपयोग करते हैं तो यह वास्तविक लॉगिन स्थिति को नहीं बताएगा।
जनोस स्जाबो

6

एक और उदाहरण, यदि आप AJAX कॉल के लिए इसका उपयोग करना चाहते हैं।

// Simplified... please note, that all names/vars/etc. in my class got unique names.
// ...the same goes for the script handler.
class wpse69814_example
{
    public $response;

    public function __construct()
    {
        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue' ) );
        add_action( 'wp_enqueue_scripts', array( $this, 'localize' ), 20 );
    }

    public function enqueue()
    {
        wp_enqueue_script(
            'wpse69814_handler',
            plugins_url( 'url/to/file.js', __FILE__ ),
            array( 'jquery' ),
            filemtime( plugins_dir_path( __FILE__ ).'/path/to/file.js' ),
            true
        );
    }

    public function localize()
    {
        wp_localize_script( 'wpse69814_handler, 'wpse69814_object', array(
            'ajaxurl'    => admin_url( 'admin-ajax.php' ),
            'ajax_nonce' => wp_create_nonce( 'wpse69814_nonce' ),
            'action'     => 'wpse69814-handler-action',
            'data'       => array(
               'is_user_logged_in' => is_user_logged_in(),
            )
         )

    }
}

ध्यान दें, यह दृष्टिकोण CDN के पीछे काम नहीं करता है। : डी
ब्रायन फीगर

@BrianFegter व्याख्या करना चाहते हैं (या इसे संपादित कर सकते हैं) क्यों? :)
कैसर

चूंकि सीडीएन वर्डप्रेस के साथ प्रमाणित नहीं करता है, is_user_logged_inइसलिए डोम को झूठा करार दिया जाएगा जब मूल को हिट किया जाता है तो उपयोगकर्ता राज्य को सीडीएन का उपयोग करते समय एक्सएचआर के माध्यम से नो-कैश थ्रेड से बाहर किया जाना चाहिए। @ मृदुल अग्रवाल का दृष्टिकोण काम करता है लेकिन प्रतिक्रिया में नो-कैश हेडर के साथ।
ब्रायन फीगर

@BrianFegter अच्छी पकड़। तय किया कि ... मुझे लगता है। साथ ही अन्य उत्तरों को भी प्रस्तुत किया।
कैसर

2

कृपया ध्यान दें कि यदि आप पृष्ठ कैशिंग प्लगइन का उपयोग करते हैं तो उपरोक्त उदाहरणों में से कोई भी विश्वसनीय नहीं है, फिर बॉडी टैग में कोड स्थिर होगा। इसके अलावा यह करने का एक सरल तरीका है (अजाक्स के लिए कोई अतिरिक्त क्वेरी नहीं है जो इष्टतम नहीं है)

यदि आप जावास्क्रिप्ट के साथ राज्य में लॉग इन किए गए उपयोगकर्ता का परीक्षण करना चाहते हैं, तो आप इस कोड का उपयोग कुकी सेट करने के लिए कर सकते हैं जब उपयोगकर्ता लॉग इन करता है और उपयोगकर्ता लॉग आउट होने पर कुकी को हटा देता है। इसे जोड़ें। अपने विषय के लिए

function login_function() {
    setcookie('wp_user_logged_in', 1, time() + 31556926, '/');
    $_COOKIE['wp_user_logged_in'] = 1;
}
add_action('wp_login', 'login_function');

function logout_function() {
    unset($_COOKIE['wp_user_logged_in']);
    setcookie('wp_user_logged_in', null, -1, '/');
}
add_action('wp_logout', 'logout_function');

फिर जावास्क्रिप्ट में कुकी का एक सरल परीक्षण।

if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
    //do something when user logged in
} else {
    //do something when user logged out
}

यह वास्तव में बहुत सरल है, विश्वसनीय है और सबसे खराब स्थिति में पृष्ठ लोड के बाद लगभग तुरंत निष्पादित होता है (यदि रेंडरिंग के बिना पाद लेख में लोडिंग स्क्रिप्ट अन्य उत्तरों के विपरीत)। अजाक्स धीमा है और शरीर की कक्षाओं पर निर्भर होना कैशिंग पर विफल होगा। इस कुकी को कुकी नीति पाठ में जोड़ने की आवश्यकता है। थैंक यू जानोस।
रेज़्ज़र्ड जोर्डाज़क

अनुवर्ती के रूप में, डिफ़ॉल्ट वर्डप्रेस कुकीज़ और नव निर्मित स्क्रिप्ट-सुलभ कुकी के सिंक्रनाइज़ेशन के साथ एक समस्या है, लेकिन मुझे इसे हल करने के तरीके पर एक महान और सरल उत्तर मिला है: stackoverflow.com/questions/56208574/…
Ryszard Jysdraszyk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.