Tôi muốn thực thi mã jquery tùy chỉnh hiển thị hộp thoại đăng nhập cho người dùng nếu anh ta nhấp vào nút và anh ta chưa đăng nhập. Làm thế nào tôi có thể làm điều đó?
Tôi muốn thực thi mã jquery tùy chỉnh hiển thị hộp thoại đăng nhập cho người dùng nếu anh ta nhấp vào nút và anh ta chưa đăng nhập. Làm thế nào tôi có thể làm điều đó?
Câu trả lời:
Trong trường hợp bạn muốn biết nếu người dùng đăng nhập tại thời điểm hiện tại. Các câu trả lời khác kiểm tra xem người dùng có đăng nhập hay không khi trang được tải không phải là lúc bạn đang chạy javascript. Người dùng có thể đã đăng nhập vào một tab riêng biệt chẳng hạn
Đặt cái này vào javascript của bạn
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
}
});
đặt cái này trong hàm của bạn.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');
Kiểm tra class
thuộc tính cho body
: Nếu chủ đề đang sử dụng body_class()
phần thân có một lớp được đặt tên logged-in
cho người dùng đã đăng nhập. Hãy lưu ý chức năng cũng có thể được sử dụng trên phần tử html
.
Thí dụ
if(jQuery('body').hasClass('logged-in')){
// Do something
}
Bạn cũng có thể chỉ sử dụng is_user_logged_in()
như một điều kiện để ghi danh hoặc in tập lệnh.
logged-in
lớp học. Chỉ cần chắc chắn rằng các chủ đề sử dụng body_class();
hoặc get_body_class();
nếu không, đó không phải là một giải pháp siêu đáng tin cậy. Mặc dù, tôi sử dụng các chức năng đó trong các chủ đề của mình, vì vậy đó là một giải pháp tốt cho tôi. Cảm ơn ý tưởng đơn giản.
Vui lòng thêm body_group () vào cơ thể html của bạn
<body <?php body_class(); ?>>
//your html code
</body>
Điều này sẽ thêm logged-in
cho người dùng đã đăng nhập, sau đó bạn có thể sử dụng mã jquery sau để thực thi mã juqery tùy chỉnh của mình cho người dùng đã đăng nhập.
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
Một ví dụ khác, trong trường hợp bạn muốn sử dụng nó cho các cuộc gọi 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
sẽ được lưu vào bộ đệm là sai trong DOM khi nguồn gốc được nhấn Trạng thái người dùng nên được tóm tắt thành luồng không có bộ đệm thông qua XHR khi sử dụng CDN. Cách tiếp cận của @Mridul Aggarwal hoạt động nhưng với các tiêu đề không có bộ đệm trong phản hồi.
Xin lưu ý rằng không có ví dụ nào ở trên là đáng tin cậy trong trường hợp bạn sử dụng plugin bộ đệm trang, thì mã trong thẻ body sẽ là tĩnh. Ngoài ra có một cách đơn giản để làm điều này (không có truy vấn thêm vào ajax không tối ưu)
Nếu bạn muốn kiểm tra người dùng đã đăng nhập trạng thái bằng javascript, bạn có thể sử dụng mã này để đặt cookie khi người dùng đăng nhập và xóa cookie khi người dùng đăng xuất. Thêm ví dụ này. chức năng chủ đề của bạn.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');
Sau đó, nó là một thử nghiệm đơn giản của cookie trong javascript.
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}