Nếu bạn muốn thêm chức năng điểm danh cho tài khoản WordPress để tăng tương tác, bài viết này sẽ giúp bạn.
Plugin cần thiết cho chức năng này là Advanced Custom Fields (ACF), và hệ thống điểm thưởng để làm phần thưởng điểm danh, tham khảo các bài viết này:
Tạo dữ liệu
Bạn cần tạo một trường dữ liệu để lưu số lượng ngày điểm danh liên tiếp, và một trường ngày tháng để lưu lần cuối điểm danh.
Phương thức xử lí
Tại functions.php
, các bạn thêm phương thức tính điểm như sau.
/**
* Điểm danh qua Ajax
*/
add_action('wp_ajax_rollup', 'roll_up');
add_action('wp_ajax_nopriv_rollup', 'roll_up');
function roll_up() {
$r_data = array();
if (is_user_logged_in()) {
$curr_user_id = get_current_user_id();
$last_login = get_field('last_login', 'user_' . $curr_user_id);
$ru_count = get_field('rollup_count', 'user_' . $curr_user_id);
if (!$ru_count) $ru_count = 0;
date_default_timezone_set('Asia/Ho_Chi_Minh');
$curr_date = date('d/m/Y', time());
if ($last_login != $curr_date) {
$quan = 30;
$yes_day = date('d/m/Y', strtotime("-1 day"));
if ($last_login == $yes_day) $ru_count++;
else $ru_count = 1;
if (intval($ru_count) % 7 == 0) { // Điểm danh đủ 7 ngày
$quan = 100;
}
if (intval($ru_count) % 30 == 0) { // Điểm danh đủ 30 ngày
$quan = 500;
}
update_field('rollup_count', $ru_count, 'user_' . $curr_user_id);
$c_v = calc_fish($quan, '+');
update_field('last_login', $curr_date, 'user_' . $curr_user_id);
$r_data = array('rollup' => 'success');
} else {
$r_data = array('rollup' => 'fail');
}
} else {
$r_data = array('rollup' => 'fail');
}
wp_send_json_success($r_data);
die();
}
Với calc_fish
là phương thức tính Cá ở bài viết điểm thưởng. Phương thức trên cộng 30 điểm khi điểm danh hàng ngày, 100 điểm khi điển danh đủ 7 ngày và 500 điểm khi điểm danh đủ 30 ngày liên tiếp.
jQuery
Bạn chỉ cần gọi Ajax như sau.
<script type="text/javascript">
$(document).ready(function() {
$('#roll-up-btn').click(function() {
$(this).addClass('disabled');
$.ajax({
type: 'post',
dataType: 'json',
url: ocmAjax,
data: {
'action': 'rollup'
},
success: function(response) {
if (response.success) {
if (response.data.rollup == 'success') {
console.log('Điểm danh thành công.');
} else {
console.log('Điểm danh thất bại.');
}
}
}
});
});
});
</script>
Chúc các bạn thành công!
Không có bình luận.