Bir düğmeyi tıkladığında ve oturum açmadıysa kullanıcıya giriş iletişim kutusunu gösteren özel jquery kodu yürütmek istiyorum. Bunu nasıl yapabilirim?
Bir düğmeyi tıkladığında ve oturum açmadıysa kullanıcıya giriş iletişim kutusunu gösteren özel jquery kodu yürütmek istiyorum. Bunu nasıl yapabilirim?
Yanıtlar:
Kullanıcının geçerli anda oturum açmış olup olmadığını bilmek istemeniz durumunda. Diğer yanıtlar, javascript'i çalıştırdığınız zaman değil sayfa yüklendiğinde kullanıcının oturum açmış olup olmadığını kontrol eder. Kullanıcı örneğin ayrı bir sekmede oturum açmış olabilir
Bunu javascript'inize koyun
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
}
});
bunu işlevlerinize koyun. 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');
Şu class
özniteliği denetleyin body
: Tema body_class()
gövdeyi kullanıyorsa , logged-in
oturum açmış kullanıcılar için adlandırılmış bir sınıfa sahiptir . İşlevin öğede html
de kullanılabileceğini unutmayın.
Misal
if(jQuery('body').hasClass('logged-in')){
// Do something
}
Ayrıca is_user_logged_in()
, komut dosyasını sıralamak veya yazdırmak için bir koşul olarak da kullanabilirsiniz .
logged-in
sınıf için kontrol etme fikrini seviyorum . Sadece temaların kullanıldığından emin olmalısınız body_class();
veya get_body_class();
Aksi takdirde, bu süper güvenilir bir çözüm değildir. Her ne kadar bu işlevleri temalarımda kullanıyorum, bu yüzden bu benim için iyi bir çözüm. Basit bir fikir için teşekkürler.
Lütfen html gövdesine body_class () ekleyin
<body <?php body_class(); ?>>
//your html code
</body>
Bu, logged-in
günlüğe kaydedilen kullanıcı için ekleyecektir , daha sonra, yalnızca kayıtlı kullanıcı için özel juqery kodunuzu yürütmek için aşağıdaki jquery kodunu kullanabilirsiniz.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
AJAX çağrıları için kullanmak istemeniz durumunda başka bir örnek.
// 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
kaynak isabet edildiğinde DOM'da yanlış olarak önbelleğe alınacağı için CDN kullanılırken Kullanıcı durumu XHR aracılığıyla önbelleksiz bir iş parçacığına çıkarılmalıdır. @Mridul Aggarwal'ın yaklaşımı işe yarıyor ancak yanıtta önbellek yok.
Sayfa önbellekleme eklentisi kullanmanız durumunda yukarıdaki örneklerin hiçbirinin güvenilir olmadığını, ardından gövde etiketindeki kodun statik olacağını lütfen unutmayın. Ayrıca bunu yapmanın basit bir yolu var (optimum olmayan ajax'a ekstra sorgulama yapmadan)
Javascript ile oturum açmış kullanıcının durumunu test etmek isterseniz, kullanıcı oturum açtığında çerezi ayarlamak ve oturum kapatıldığında çerezi silmek için bu kodu kullanabilirsiniz. Bunu ekleyin örn. Tema işlevlerinize
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');
Sonra onun javascript çerez basit bir test.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}