Compruebe si el usuario ha iniciado sesión con JQuery

12

Quiero ejecutar un código jquery personalizado que muestre el diálogo de inicio de sesión al usuario si hace clic en un botón y no está conectado. ¿Cómo podría hacer eso?

    
pregunta Feras Odeh 19.10.2012 - 14:40

5 respuestas

22

En caso de que quiera saber si el usuario ha iniciado sesión en el momento actual. Las otras respuestas verifican si el usuario ha iniciado sesión o no cuando la página no se cargó en el momento en que está ejecutando el javascript. El usuario podría haber iniciado sesión en una pestaña separada, por ejemplo,

Pon esto en tu 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
    }
});

pon esto en tus funciones.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');
    
respondido por el Mridul Aggarwal 19.10.2012 - 15:16
22

Verifique el atributo class para body : si el tema usa body_class() , el cuerpo tiene una clase llamada logged-in para los usuarios que han iniciado sesión. Tenga en cuenta que la función se puede usar en el elemento html también.

Ejemplo

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

También puede usar is_user_logged_in() como condición para poner en cola o imprimir el script.

    
respondido por el fuxia 19.10.2012 - 14:51
18

Agregue body_class () a su cuerpo html

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

Esto agregará logged-in para el usuario registrado, luego puede usar el siguiente código jQuery para ejecutar su código de extracción personalizado solo para el usuario registrado.

if ($('body').hasClass('logged-in')) {
       //execute your jquery code.
}
    
respondido por el Monirul Islam 19.10.2012 - 16:29
6

Otro ejemplo, en caso de que quieras usarlo para llamadas 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(),
            )
         )

    }
}
    
respondido por el kaiser 19.10.2012 - 15:11
0

Tenga en cuenta que ninguno de los ejemplos anteriores es confiable en caso de que use un complemento de caché de página, entonces el código en la etiqueta del cuerpo será estático. También hay una forma sencilla de hacerlo (sin una consulta adicional a ajax que no es óptima)

Si desea probar el estado de inicio de sesión del usuario con javascript, puede usar este código para configurar la cookie cuando el usuario inició sesión y eliminar la cookie cuando el usuario finalizó la sesión. Añade esto por ejemplo. a tus funciones de tema.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');

Entonces es una prueba simple 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
}
    
respondido por el Janos Szabo 25.03.2018 - 07:20

Lea otras preguntas en las etiquetas