Saya ingin mengeksekusi kode jquery khusus yang menampilkan dialog masuk ke pengguna jika dia mengklik tombol dan dia tidak masuk. Bagaimana saya bisa melakukannya?
Saya ingin mengeksekusi kode jquery khusus yang menampilkan dialog masuk ke pengguna jika dia mengklik tombol dan dia tidak masuk. Bagaimana saya bisa melakukannya?
Jawaban:
Jika Anda ingin tahu apakah pengguna masuk saat ini. Jawaban lainnya memeriksa apakah pengguna masuk atau tidak ketika halaman dimuat bukan waktu ketika Anda menjalankan javascript. Pengguna bisa masuk di tab terpisah misalnya
Letakkan ini di javascript Anda
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
}
});
letakkan ini di functions.php Anda
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');
Periksa class
atribut untuk body
: Jika tema menggunakan body_class()
tubuh memiliki kelas yang dinamai logged-in
untuk pengguna yang masuk. Waspadai fungsi tersebut dapat digunakan pada elemen html
juga.
Contoh
if(jQuery('body').hasClass('logged-in')){
// Do something
}
Anda juga dapat menggunakan is_user_logged_in()
sebagai syarat untuk meminta atau mencetak skrip.
logged-in
kelas. Hanya harus memastikan bahwa tema menggunakan body_class();
atau get_body_class();
Jika tidak, itu bukan solusi yang sangat andal. Meskipun, saya menggunakan fungsi-fungsi itu di tema saya, jadi itu solusi yang baik untuk saya. Terima kasih atas ide sederhana.
Silakan tambahkan body_class () ke tubuh html Anda
<body <?php body_class(); ?>>
//your html code
</body>
Ini akan menambah logged-in
untuk pengguna yang dicatat maka Anda dapat menggunakan kode jquery berikut untuk mengeksekusi kode kustom Anda hanya untuk pengguna yang dicatat.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
Contoh lain, jika Anda ingin menggunakannya untuk panggilan 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
akan di-cache sebagai salah di DOM ketika asal terkena. Status pengguna harus diabstraksi ke utas tanpa-cache melalui XHR saat menggunakan CDN. Pendekatan @Mridul Aggarwal berfungsi tetapi tanpa header cache dalam respons.
Harap perhatikan bahwa tidak ada contoh di atas yang dapat diandalkan jika Anda menggunakan plugin cache halaman, maka kode dalam tag tubuh akan menjadi statis. Juga ada cara sederhana untuk melakukan ini (tanpa permintaan tambahan untuk ajax yang tidak optimal)
Jika Anda ingin menguji status login pengguna dengan javascript, Anda dapat menggunakan kode ini untuk mengatur cookie ketika pengguna login dan menghapus cookie ketika pengguna keluar. Tambahkan ini mis. ke functions.php tema Anda
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');
Kemudian ini merupakan tes cookie sederhana dalam javascript.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}