Voglio eseguire il codice jquery personalizzato che mostra la finestra di dialogo di accesso all'utente se fa clic su un pulsante e non è connesso. Come potrei farlo?
Voglio eseguire il codice jquery personalizzato che mostra la finestra di dialogo di accesso all'utente se fa clic su un pulsante e non è connesso. Come potrei farlo?
Risposte:
Nel caso in cui desideri sapere se l'utente ha effettuato l'accesso al momento attuale. Le altre risposte controllano se l'utente ha effettuato l'accesso o meno quando la pagina non è stata caricata quando è in esecuzione il javascript. Ad esempio, l'utente potrebbe aver effettuato l'accesso in una scheda separata
Metti questo nel tuo 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
}
});
inseriscilo nelle tue funzioni.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');
Controlla l' class
attributo per body
: Se il tema utilizza body_class()
il corpo ha una classe denominata logged-in
per gli utenti che hanno effettuato l'accesso. Ricorda che la funzione può essere utilizzata html
anche sull'elemento .
Esempio
if(jQuery('body').hasClass('logged-in')){
// Do something
}
Puoi anche usare solo is_user_logged_in()
una condizione per accodare o stampare lo script.
logged-in
classe. Devi solo essere sicuro che i temi utilizzino body_class();
o get_body_class();
Altrimenti, non è una soluzione super affidabile. Anche se uso queste funzioni nei miei temi, quindi questa è una buona soluzione per me. Grazie per l'idea semplice.
Aggiungi body_class () al tuo corpo html
<body <?php body_class(); ?>>
//your html code
</body>
Ciò verrà aggiunto logged-in
per l'utente registrato, quindi è possibile utilizzare il seguente codice jquery per eseguire il codice juqery personalizzato solo per l'utente registrato.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
Un altro esempio, nel caso in cui si desideri utilizzarlo per le chiamate 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
verrà memorizzata nella cache come falsa nel DOM quando viene colpita l'origine Lo stato utente deve essere estratto su un thread senza cache tramite XHR quando si utilizza una CDN. L'approccio di @Mridul Aggarwal funziona ma con le intestazioni senza cache nella risposta.
Si noti che nessuno degli esempi precedenti è affidabile nel caso in cui si utilizzi un plug-in di cache della pagina, quindi il codice nel tag body sarà statico. Inoltre c'è un modo semplice per farlo (senza query extra su Ajax che non è ottimale)
Se si desidera verificare lo stato di accesso dell'utente con JavaScript, è possibile utilizzare questo codice per impostare i cookie quando l'utente ha effettuato l'accesso ed eliminare i cookie quando l'utente si è disconnesso. Aggiungi questo ad es. al tuo tema funzioni.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');
Quindi è un semplice test di cookie in JavaScript.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}