Kullanıcının JQuery kullanarak giriş yaptığını kontrol edin


17

Bir düğmeyi tıkladığında ve oturum açmadıysa kullanıcıya giriş iletişim kutusunu gösteren özel jquery kodu yürütmek istiyorum. Bunu nasıl yapabilirim?

Yanıtlar:


26

Kullanıcının geçerli anda oturum açmış olup olmadığını bilmek istemeniz durumunda. Diğer yanıtlar, javascript'i çalıştırdığınız zaman değil sayfa yüklendiğinde kullanıcının oturum açmış olup olmadığını kontrol eder. Kullanıcı örneğin ayrı bir sekmede oturum açmış olabilir

Bunu javascript'inize koyun

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

bunu işlevlerinize koyun. php

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

Ajaxurl'un değeri nedir?
Feras Odeh

wordpress bunu 'siteniz.com/wp-admin/admin-ajax.php' olarak ayarlar. Tüm ajax isteklerinin gönderileceği url bu
Mridul Aggarwal

JQuery.post jquery tıklama işleyicisi içine koymak ama bu çalışmıyor. nasıl çözeceğine dair bir fikrin var mı?
Feras Odeh

Konsolda ajaxurl'un tanımlanmadığını gördüm.
Feras Odeh

1
[codex] (codex.wordpress.org/AJAX_in_Plugins) en son wordpress sürümlerinde bunun zaten tanımlanmış olduğunu söyledi. Belki kendi ajaxurl sürümünü wp_localize_script ile tanımlayabilirsiniz
Mridul Aggarwal

32

Şu classözniteliği denetleyin body: Tema body_class()gövdeyi kullanıyorsa , logged-inoturum açmış kullanıcılar için adlandırılmış bir sınıfa sahiptir . İşlevin öğede htmlde kullanılabileceğini unutmayın.

Misal

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

Ayrıca is_user_logged_in(), komut dosyasını sıralamak veya yazdırmak için bir koşul olarak da kullanabilirsiniz .


Bu cevap için en iyi notlar - basit ve etkili.
Q Studio

Sadece vücudu logged-insınıf için kontrol etme fikrini seviyorum . Sadece temaların kullanıldığından emin olmalısınız body_class();veya get_body_class();Aksi takdirde, bu süper güvenilir bir çözüm değildir. Her ne kadar bu işlevleri temalarımda kullanıyorum, bu yüzden bu benim için iyi bir çözüm. Basit bir fikir için teşekkürler.
Michael Ecklund

18

Lütfen html gövdesine body_class () ekleyin

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

Bu, logged-ingünlüğe kaydedilen kullanıcı için ekleyecektir , daha sonra, yalnızca kayıtlı kullanıcı için özel juqery kodunuzu yürütmek için aşağıdaki jquery kodunu kullanabilirsiniz.

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

Bunun neden oy kullanıldığını bilmiyorum. Yaklaşım tamamen geçerlidir. +1
kaiser

Bilmiyorum. Aynı sorum var. Cevap geçerli, ancak neden aşağı oy.
Monirul Islam

Hm. Belki doğru yol yerine jQuery kullandığından (bir filtre ve geri arama kullanarak). Bazı insanlar jQuery'ye alerjisi vardır.
kaiser

1
iyi, ancak sayfa önbelleği etkinleştirilmiş bir önbellek eklentisi kullanırsanız gerçek giriş durumunu söylemez.
Janos Szabo

6

AJAX çağrıları için kullanmak istemeniz durumunda başka bir örnek.

// 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(),
            )
         )

    }
}

Bu yaklaşım CDN'nin arkasında işe yaramıyor. : D
Brian Fegter

@BrianFegter Neden açıklamak (veya düzenlemek ) isteyebilirsiniz ? :)
kaiser

CDN, WordPress ile kimlik doğrulaması yapmadığından, is_user_logged_inkaynak isabet edildiğinde DOM'da yanlış olarak önbelleğe alınacağı için CDN kullanılırken Kullanıcı durumu XHR aracılığıyla önbelleksiz bir iş parçacığına çıkarılmalıdır. @Mridul Aggarwal'ın yaklaşımı işe yarıyor ancak yanıtta önbellek yok.
Brian Fegter

@BrianFegter İyi yakaladın. Bunu düzelttim ... Bence. Diğer cevaplar da iptal edildi.
kaiser

2

Sayfa önbellekleme eklentisi kullanmanız durumunda yukarıdaki örneklerin hiçbirinin güvenilir olmadığını, ardından gövde etiketindeki kodun statik olacağını lütfen unutmayın. Ayrıca bunu yapmanın basit bir yolu var (optimum olmayan ajax'a ekstra sorgulama yapmadan)

Javascript ile oturum açmış kullanıcının durumunu test etmek isterseniz, kullanıcı oturum açtığında çerezi ayarlamak ve oturum kapatıldığında çerezi silmek için bu kodu kullanabilirsiniz. Bunu ekleyin örn. Tema işlevlerinize

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

Sonra onun javascript çerez basit bir test.

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

Bu gerçekten oldukça basit, güvenilir ve en kötü durumda, diğer yanıtların aksine sayfa yüklendikten hemen sonra (komut dosyası altbilgiye renderleme engellemeden yükleniyorsa) yürütülür. Ajax yavaştır ve vücut sınıflarına güvenmek önbelleklemede başarısız olur. Bu çerezi Çerez Politikası metnine eklemeniz gerekiyor. Teşekkürler Janos.
Ryszard Jędraszyk

Bir takip olarak, varsayılan WordPress çerezlerinin ve yeni oluşturulmuş komut dosyası erişilebilir çerezlerin senkronizasyonu ile ilgili bir sorun var, ancak nasıl çözüleceğine dair harika ve basit bir cevap aldım: stackoverflow.com/questions/56208574/…
Ryszard Jędraszyk
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.