Vérifier si l'utilisateur est connecté avec JQuery

12

Je veux exécuter un code jQuery personnalisé qui montre la boîte de dialogue de connexion à l'utilisateur s'il clique sur un bouton et qu'il n'est pas connecté. Comment pourrais-je le faire?

    
posée Feras Odeh 19.10.2012 - 14:40

5 réponses

22

Si vous voulez savoir si l'utilisateur est connecté au moment actuel. Les autres réponses vérifient si l'utilisateur est connecté ou non lorsque la page chargée n'est pas l'heure à laquelle vous exécutez le javascript. L'utilisateur aurait pu s'identifier dans un onglet séparé, par exemple

.

Mettez ceci dans votre javascript

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

mettez ceci dans votre functions.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');
    
réponse donnée Mridul Aggarwal 19.10.2012 - 15:16
22

Vérifiez l'attribut class pour body : si le thème utilise body_class() , le corps a une classe nommée logged-in pour les utilisateurs connectés. Notez que la fonction peut être utilisée sur l'élément html aussi.

Exemple

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

Vous pouvez également simplement utiliser is_user_logged_in() comme condition pour mettre en file d'attente ou imprimer le script.

    
réponse donnée fuxia 19.10.2012 - 14:51
18

Veuillez ajouter body_class () à votre corps HTML

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

Ceci ajoutera logged-in pour l'utilisateur connecté, vous pourrez alors utiliser le code jQuery suivant pour exécuter votre code de requête personnalisé uniquement pour l'utilisateur connecté.

if ($('body').hasClass('logged-in')) {
       //execute your jquery code.
}
    
réponse donnée Monirul Islam 19.10.2012 - 16:29
6

Autre exemple, au cas où vous souhaiteriez l'utiliser pour les appels 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(),
            )
         )

    }
}
    
réponse donnée kaiser 19.10.2012 - 15:11
0

Veuillez noter qu'aucun des exemples ci-dessus n'est fiable si vous utilisez un plugin de mise en cache de pages, le code dans la balise body sera statique. En outre, il existe un moyen simple de le faire (sans requête supplémentaire pour ajax, ce qui n’est pas optimal)

Si vous souhaitez tester l'état de connexion de l'utilisateur avec javascript, vous pouvez utiliser ce code pour définir le cookie lorsque l'utilisateur est connecté et supprimer le cookie lorsqu'il est déconnecté. Ajoutez ceci par exemple. à votre thème functions.php

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

Ensuite, c’est un simple test de cookie en javascript.

if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
    //do something when user logged in
} else {
    //do something when user logged out
}
    
réponse donnée Janos Szabo 25.03.2018 - 07:20

Lire d'autres questions sur les étiquettes