ฉันต้องการรันโค้ด jquery ที่กำหนดเองซึ่งแสดงข้อความโต้ตอบกับผู้ใช้หากเขาคลิกปุ่มและเขาไม่ได้ล็อกอินฉันจะทำยังไง?
ฉันต้องการรันโค้ด jquery ที่กำหนดเองซึ่งแสดงข้อความโต้ตอบกับผู้ใช้หากเขาคลิกปุ่มและเขาไม่ได้ล็อกอินฉันจะทำยังไง?
คำตอบ:
ในกรณีที่คุณต้องการทราบว่าผู้ใช้เข้าสู่ระบบในช่วงเวลาปัจจุบัน คำตอบอื่น ๆ ตรวจสอบว่าผู้ใช้เข้าสู่ระบบหรือไม่เมื่อหน้าโหลดไม่เวลาเมื่อคุณใช้จาวาสคริปต์ ผู้ใช้สามารถเข้าสู่ระบบในแท็บแยกเช่น
ใส่ไว้ในจาวาสคริปต์ของคุณ
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
}
});
วางสิ่งนี้ไว้ในฟังก์ชั่นของคุณ
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');
ตรวจสอบclass
แอ็ตทริบิวต์สำหรับbody
: หากธีมใช้body_class()
เนื้อความมีคลาสชื่อlogged-in
สำหรับผู้ใช้ที่ล็อกอินโปรดทราบว่าฟังก์ชันสามารถใช้กับองค์ประกอบได้html
เช่นกัน
ตัวอย่าง
if(jQuery('body').hasClass('logged-in')){
// Do something
}
นอกจากนี้คุณยังสามารถใช้is_user_logged_in()
เป็นเงื่อนไขในการจัดคิวหรือพิมพ์สคริปต์
logged-in
เรียน เพียงแค่ต้องแน่ใจว่าชุดรูปแบบใช้body_class();
หรือget_body_class();
อื่น ๆ นั่นไม่ใช่โซลูชันที่น่าเชื่อถือที่สุด แม้ว่าฉันจะใช้ฟังก์ชั่นเหล่านั้นในธีมของฉันดังนั้นมันจึงเป็นทางออกที่ดีสำหรับฉัน ขอบคุณสำหรับความคิดที่เรียบง่าย
โปรดเพิ่ม body_class () ไปยังเนื้อหา html ของคุณ
<body <?php body_class(); ?>>
//your html code
</body>
สิ่งนี้จะเพิ่มlogged-in
สำหรับผู้ใช้ที่เข้าสู่ระบบจากนั้นคุณสามารถใช้รหัส jquery ต่อไปนี้เพื่อเรียกใช้รหัส juqery ที่กำหนดเองสำหรับผู้ใช้ที่เข้าสู่ระบบเท่านั้น
if ($('body').hasClass('logged-in')) {
//execute your jquery code.
}
อีกตัวอย่างหนึ่งในกรณีที่คุณต้องการใช้สำหรับการโทร 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
จะถูกแคชเป็นเท็จใน DOM เมื่อจุดเริ่มต้นถูกตีสถานะของผู้ใช้ควรถูกแยกออกเป็นเธรดที่ไม่มีแคชผ่าน XHR เมื่อใช้ CDN @Mridul Aggarwal ใช้วิธีการได้ แต่ไม่มีส่วนหัวแคชในการตอบกลับ
โปรดทราบว่าไม่มีตัวอย่างใด ๆ ข้างต้นที่มีความน่าเชื่อถือในกรณีที่คุณใช้ปลั๊กอินการแคชหน้าจากนั้นรหัสในแท็กร่างกายจะคงที่ นอกจากนี้ยังมีวิธีง่ายๆในการทำเช่นนี้ (โดยไม่ต้องสอบถามเพิ่มเติมเพื่อ ajax ซึ่งไม่เหมาะสม)
หากคุณต้องการทดสอบผู้ใช้ที่เข้าสู่ระบบด้วย javascript คุณสามารถใช้รหัสนี้เพื่อตั้งค่าคุกกี้เมื่อผู้ใช้เข้าสู่ระบบและลบคุกกี้เมื่อผู้ใช้ออกจากระบบ เพิ่มเช่น เพื่อฟังก์ชั่นชุดรูปแบบของคุณ
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');
จากนั้นเป็นการทดสอบคุกกี้อย่างง่าย ๆ ใน javascript
if (document.cookie.indexOf('wp_user_logged_in') !== -1) {
//do something when user logged in
} else {
//do something when user logged out
}