Quero executar o código jquery personalizado que mostra a caixa de diálogo de login do usuário se ele clicar em um botão e ele não estiver conectado. Como eu poderia fazer isso?
Quero executar o código jquery personalizado que mostra a caixa de diálogo de login do usuário se ele clicar em um botão e ele não estiver conectado. Como eu poderia fazer isso?
Respostas:
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 carregou e 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');
Verifique o class
atributo para body
: Se o tema estiver usando body_class()
o corpo, há uma classe nomeada logged-in
para usuários que estão conectados. Lembre-se de que a função também pode ser usada no elemento html
.
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.
logged-in
aula. Só precisa ter certeza de que os temas usam body_class();
ou get_body_class();
Caso contrário, essa não é uma solução super confiável. Embora eu use essas funções nos meus temas, essa é uma boa solução para mim. Obrigado pela idéia simples.
Adicione body_class () ao seu corpo html
<body <?php body_class(); ?>>
//your html code
</body>
Isso adicionará logged-in
ao usuário logado e você poderá usar o seguinte código jquery para executar seu código juqery personalizado apenas para o usuário logado.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
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(),
)
)
}
}
is_user_logged_in
será armazenada em cache como DOM no DOM quando a origem for atingida. O estado do usuário deve ser abstraído para um thread sem cache via XHR ao usar uma CDN. A abordagem de @Mridul Aggarwal funciona, mas com cabeçalhos sem cache na resposta.
Observe que nenhum dos exemplos acima é confiável, caso você use um plug-in de cache de página, o código na tag body será estático. Também existe uma maneira simples de fazer isso (sem consulta extra ao ajax que não seja ideal)
Se você deseja testar o estado de logon do usuário com javascript, pode usar este código para definir o cookie quando o usuário efetuou login e excluir o cookie quando o usuário efetuou logout. Adicione isto, por exemplo. ao 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
}