Hệ thống tích điểm và đổi quà là một trong những cách hiệu quả để giữ chân người dùng và khuyến khích sự tương tác trên website. Dưới đây, chúng ta sẽ đi sâu vào chi tiết về cách triển khai tính năng này trên WordPress, bao gồm các bước thêm điểm thưởng cho người dùng và xử lý đổi quà.
1. Tính năng thêm điểm thưởng cho người dùng
Mã nguồn dưới đây cho phép người dùng đã đăng nhập nhận điểm thưởng sau khi tương tác với bài viết. Điểm thưởng được cập nhật ngẫu nhiên từ 1000 đến 10000 điểm sau khi người dùng thực hiện hành động và điểm này được lưu vào thông tin người dùng.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// Thêm điểm thưởng cho người dùng function add_reward_points() { if (!is_user_logged_in()) { return; // Kiểm tra nếu người dùng chưa đăng nhập } $user_id = get_current_user_id(); // Lấy ID người dùng $points = get_user_meta($user_id, 'reward_points', true) ?: 0; // Lấy số điểm hiện tại // Kiểm tra xem người dùng đã nhận thưởng cho bài viết này chưa $post_id = intval($_POST['post_id']); $received_rewards = get_user_meta($user_id, 'received_rewards', true) ?: []; if (in_array($post_id, $received_rewards)) { wp_send_json(['message' => 'Bạn đã nhận thưởng cho bài viết này rồi.']); return; } // Thêm điểm ngẫu nhiên từ 1000 đến 10000 $earned_points = rand(1000, 10000); $new_points = $points + $earned_points; update_user_meta($user_id, 'reward_points', $new_points); // Lưu bài viết vào danh sách đã nhận thưởng $received_rewards[] = $post_id; update_user_meta($user_id, 'received_rewards', $received_rewards); wp_send_json(['message' => "Bạn đã nhận được $earned_points điểm thưởng! Điểm hiện tại của bạn: $new_points"]); } add_action('wp_ajax_add_reward_points', 'add_reward_points'); |
Giải thích:
- Kiểm tra người dùng đăng nhập: Chỉ những người đã đăng nhập mới có thể nhận điểm.
- Kiểm tra bài viết: Đảm bảo rằng người dùng không thể nhận thưởng nhiều lần cho cùng một bài viết.
- Thêm điểm thưởng ngẫu nhiên: Người dùng có thể nhận được từ 1000 đến 10000 điểm cho mỗi lần tương tác thành công.
2. Xử lý đổi quà
Sau khi người dùng tích đủ điểm, họ có thể đổi điểm để nhận quà. Dưới đây là mã xử lý khi người dùng yêu cầu đổi quà:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// Xử lý đổi quà function redeem_reward() { $user_id = get_current_user_id(); // Lấy ID người dùng $points = get_user_meta($user_id, 'reward_points', true) ?: 0; // Lấy số điểm hiện tại if ($points < 1000) { wp_send_json(['message' => 'Không đủ điểm để đổi quà.']); return; } // Lấy ID sản phẩm từ yêu cầu $product_id = intval($_GET['product']); // Giảm 1000 điểm khi đổi quà $new_points = $points - 1000; update_user_meta($user_id, 'reward_points', $new_points); // Tạo đơn hàng $order = wc_create_order(); $order->add_product(wc_get_product($product_id), 1); $order->set_customer_id($user_id); $order->calculate_totals(); $order->update_status('completed'); wp_send_json(['message' => 'Bạn đã đổi quà thành công!']); } add_action('wp_ajax_redeem_reward', 'redeem_reward'); |
Giải thích:
- Kiểm tra số điểm: Hệ thống kiểm tra số điểm hiện tại của người dùng, nếu ít hơn 1000 điểm, họ không thể đổi quà.
- Tạo đơn hàng: Khi người dùng đổi quà, một đơn hàng sẽ được tạo tự động trong WooCommerce và trạng thái của đơn hàng sẽ được cập nhật là ‘đã hoàn thành’.
3. Trang hiển thị đổi quà
Người dùng có thể kiểm tra số điểm hiện tại, cấp độ, và phần thưởng họ nhận được. Nếu đủ điểm, họ có thể chọn quà từ danh sách và thực hiện đổi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
function reward_redemption_page() { if (!is_user_logged_in()) { return 'Bạn cần đăng nhập để truy cập trang này.'; } $user_id = get_current_user_id(); $points = get_user_meta($user_id, 'reward_points', true) ?: 0; ob_start(); ?> <h2>Trang đổi quà</h2> <p>Điểm hiện tại của bạn: <?php echo $points; ?></p> <form id="redeem-form"> <select name="product" id="product" required> <option value="">--Chọn sản phẩm--</option> <?php $product_ids = get_option('reward_product_ids', ''); foreach (explode(',', $product_ids) as $product_id) { $product = wc_get_product($product_id); if ($product) { echo '<option value="'.$product_id.'">'.$product->get_name().'</option>'; } } ?> </select> <button type="button" id="redeem-button">Đổi quà</button> </form> <div id="response-message"></div> <script> document.getElementById('redeem-button').onclick = function() { var product = document.getElementById('product').value; fetch('<?php echo admin_url('admin-ajax.php'); ?>?action=redeem_reward&product=' + product) .then(response => response.json()) .then(data => { document.getElementById('response-message').innerHTML = data.message; }); }; </script> <?php return ob_get_clean(); } add_shortcode('reward_redemption', 'reward_redemption_page'); |
Giải thích:
- Chọn sản phẩm: Người dùng có thể chọn sản phẩm từ danh sách để đổi quà.
- Hiển thị thông báo: Sau khi đổi quà, hệ thống sẽ hiển thị thông báo trạng thái thành công hoặc thất bại.
- Giới thiệu tính năng Flash Sale “Đã bán bao nhiêu” giống Shopee
- Hướng Dẫn Tạo Popup SweetAlert2 Yêu Cầu Đăng Nhập Trong WordPress
- Cách Thêm Cột Hiển Thị ID Danh Mục Sản Phẩm Trong WooCommerce – Hướng Dẫn Chi Tiết
- #1 Giới thiệu về chức năng bảng tin Dashboard WordPress là gì ?
- Hướng Dẫn Tạo Trang Chức Năng Đổi Mật Khẩu Tùy Chỉnh Cho Thành Viên WordPress