Verifique se o usuário está logado usando o JQuery

12

Eu quero executar código jquery personalizado que mostre o diálogo de login para o usuário se ele clicar em um botão e ele não estiver logado. Como eu poderia fazer isso?

    
por Feras Odeh 19.10.2012 / 14:40

5 respostas

22

Caso você queira saber se o usuário está logado no momento atual. As outras respostas verificam se o usuário está logado ou não quando a página carregada não é o momento em que você está executando o javascript. O usuário pode ter feito login em uma guia separada por exemplo

Coloque isso no seu 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
    }
});

coloque isso em suas funções.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');
    
por Mridul Aggarwal 19.10.2012 / 15:16
22

Verifique o atributo class para body : Se o tema estiver usando body_class() , o corpo tem uma classe chamada logged-in para usuários que estão conectados. Esteja ciente de que a função pode ser usada no elemento html também.

Exemplo

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

Você também pode usar apenas is_user_logged_in() como condição para enfileirar ou imprimir o script.

    
por fuxia 19.10.2012 / 14:51
18

Por favor adicione body_class () ao seu corpo html

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

Isto irá adicionar logged-in para o usuário logado, então você pode usar o seguinte código jquery para executar seu código juqery customizado somente para o usuário logado.

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

Outro exemplo, caso você queira usá-lo para chamadas 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(),
            )
         )

    }
}
    
por kaiser 19.10.2012 / 15:11
0

Por favor, note que nenhum dos exemplos acima são confiáveis no caso de você usar um plugin de cache de página, então o código na tag body será estático. Também há uma maneira simples de fazer isso (sem consulta extra para ajax que não é a melhor)

Se você quiser testar o estado de login do usuário com o javascript, poderá usar esse código para definir o cookie quando o usuário estiver conectado e excluir o cookie quando o usuário fizer logout. Adicione isto, por exemplo. para o seu tema 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');

Então é um teste simples de cookie em javascript.

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