TODO: To change the footer's content go to Dr.Explain menu Options : Project Settings : HTML (CHM) Export : Setup HTML Template and Layout
Sử lý ajax trong wordpress
Tính năng ajax đã được sử trong wordpress back end, hỗ trợ rất dễ dàng tất cả những gì bạn cần làm là sử dụng ajax api của wordpress, chạy trên file admin-ajax.php trong thư mục wp-admin.
Mỗi một yêu cầu ajax được gửi đi, sẽ nhận dạng thông qua tên action mà tạo 2 hook 'wp_ajax_{my_action}' và 'wp_ajax_nopriv_{my_action}' trong đó ‘my_action’ là tên hành động.
Thêm hàm liên kết vào hook đầu tiên nghĩa là hàm sẽ kích hoạt khi người dùng đó đăng nhập vào hệ thống wordpress, trường hợp này sử dụng khi bạn tương tác với dữ liệu liệu nhạy cảm, yêu cầu thông tin của người dùng. Ngược lại với hook thứ 2 dành cho thiết kế riêng cho mọi người dung.
Bài tập: Ví dụ chúng ta tạo link cho phép người dùng vote bài viết.
- Hiển thị votes của bài viết hiện tại. Bạn có thể đặt link votes gần tiêu đề bài viết trong file single.php, thêm dòng code sau trong vòng lặp:
<?php
$votes = get_post_meta($post->ID, "votes", true)
$votes = ($votes == "") ? 0 : $votes;
?>
This post has <div id='vote_counter'><?php echo $votes ?></div> votes<br>
Lưu dữ liệu ‘votes’ gắn vào meta key của post. Meta field ‘votes’ sẽ lưu tổng số votes người dùng bình chọn cho bài viết. Nếu giá trị này chưa có bạn hiển thị chuỗi ban đầu bằng 0.
liên kết ajax chứa liên kết vào file admin-ajax.php trong đó xác định thông tin ‘action’ thực thi và các tham số sử dụng cho action như chỉ số post_id.
Tham số bảo mật ‘nonce’ là chuỗi mã hóa nhận dạng giữa nơi gọi và nơi nhận cho sự kiện này, tránh hacker lợi dụng.
Tạo hàm sử lý action.
Bước tiếp theo, chúng ta tạo hàm sử lý nội dung ajax (thực thi action) gán vào hook wp_ajax_my_user_vote & wp_ajax_nopriv_my_user_vote.
Xác nhận chuỗi nonce để đảm bảo nơi gửi là đúng, vì chuỗi này đều tạo ở nơi gửi và nơi nhận.
Kiểm tra lời gọi URL xuất phát trực tiếp trên trình duyệt hay gọi ẩn bằng đường ajax sử dụng biến $_SERVER['HTTP_X_REQUESTED_WITH']. Nếu đúng vậy, bạn xuất chuỗi đối tượng JSON ra màn hình tạo với hàm json_encode.
Kết thúc script, bạn luôn nhớ để lệnh dừng die(). Nếu bạn không thêm lệnh này, bạn luôn nhận giá trị trả về 0/-1 kèm theo kết quả.
Như đã giải thích:
hook ‘wp_ajax_nopriv_’ sẽ thực thi trước hook ‘wp_ajax_’ và kích hoạt khi user chưa đăng nhập để hiển thị thông báo và có thể dừng sử lý hook wp_ajax tiếp sau đó bởi lệnh die().
Để tiếp tục sử lý vào hook ajax ‘wp_ajax_’, bạn cần bỏ lệnh ngắt die() hoặc exit() trong action ‘wp_ajax_nopriv_’ và để tiết kiệm function cách tốt nhất là bạn trỏ 2 hook này vào chung hàm sử lý nội dung.
Để hàm my_user_vote hoạt động cho mọi người dùng bạn sửa lại 2 hook trên như sau:
Hàm wp_localize_script giúp bạn chuyển đối tượng php sang javascript, khá hữu ích khi bạn lưu giá trị PHP sang javascript. Ở đây chúng ta sử dụng để lưu địa chỉ ajax.
Tạo file my_voter_script.js với nội dung sau:
jQuery(document).ready( function() {
jQuery(".user_vote").click( function() {
post_id = jQuery(this).attr("data-post_id")
nonce = jQuery(this).attr("data-nonce")
jQuery.ajax({
type : "post",
dataType : "json",
url : myAjax.ajaxurl,
data : {action: "my_user_vote", post_id : post_id, nonce: nonce},