Chcę wykonać niestandardowy kod jquery, który pokazuje użytkownikowi okno logowania, jeśli kliknie przycisk i nie będzie zalogowany. Jak to zrobić?
Chcę wykonać niestandardowy kod jquery, który pokazuje użytkownikowi okno logowania, jeśli kliknie przycisk i nie będzie zalogowany. Jak to zrobić?
Odpowiedzi:
Jeśli chcesz wiedzieć, czy użytkownik jest zalogowany w danym momencie. Inne odpowiedzi sprawdzają, czy użytkownik jest zalogowany, czy nie, gdy strona jest ładowana, a nie czas, w którym uruchamiany jest JavaScript. Użytkownik mógł na przykład zalogować się w osobnej zakładce
Umieść to w swoim 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
}
});
umieść to w pliku 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');
Sprawdź, czy class
dla atrybutu body
: jeśli kompozycja korzysta body_class()
z treści, ma klasę nazwaną logged-in
dla zalogowanych użytkowników. Pamiętaj, że funkcji można również użyć w elemencie html
.
Przykład
if(jQuery('body').hasClass('logged-in')){
// Do something
}
Możesz także użyć is_user_logged_in()
jako warunku do kolejkowania lub drukowania skryptu.
logged-in
klasy. Musisz tylko upewnić się, że motywy używają body_class();
lub get_body_class();
W przeciwnym razie, to nie jest super niezawodne rozwiązanie. Chociaż używam tych funkcji w moich motywach, więc jest to dla mnie dobre rozwiązanie. Dzięki za prosty pomysł.
Dodaj body_class () do treści HTML
<body <?php body_class(); ?>>
//your html code
</body>
Spowoduje to dodanie logged-in
zalogowanego użytkownika, a następnie można użyć następującego kodu jquery do wykonania niestandardowego kodu użytkownika tylko dla zalogowanego użytkownika.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
Kolejny przykład, na wypadek gdybyś chciał użyć go do wywołań 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
w DOM będzie buforowany jako fałsz po uderzeniu pochodzenia. Stan użytkownika powinien zostać wyodrębniony do wątku bez pamięci podręcznej przez XHR podczas korzystania z CDN. Podejście @Mridul Aggarwal działa, ale w odpowiedzi zawiera nagłówki bez pamięci podręcznej.
Pamiętaj, że żaden z powyższych przykładów nie jest wiarygodny, jeśli używasz wtyczki buforującej strony, kod w tagu body będzie statyczny. Jest też prosty sposób, aby to zrobić (bez dodatkowego zapytania do ajax, które nie jest optymalne)
Jeśli chcesz przetestować stan zalogowanego użytkownika za pomocą javascript, możesz użyć tego kodu, aby ustawić plik cookie podczas logowania użytkownika i usunąć plik cookie, gdy użytkownik się wylogował. Dodaj to np. do motywu funkcji.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');
To jest prosty test ciasteczka w javascript.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}