Code giới hạn mỗi khách chỉ mua 1 sản phẩm khuyến mãi trong WooCommerce
Bài viết này mình sẽ hướng dẫn bạn cách giới hạn mỗi khách chỉ mua 1 sản phẩm khuyến mãi trong WooCommerce nhé.
Shop chạy chương trình “mỗi khách chỉ mua 1 sản phẩm khuyến mãi” để chống ôm hàng giá rẻ rồi bán lại, nhưng WooCommerce mặc định không chặn được kiểu này. WooCommerce có sẵn tùy chọn “Bán riêng lẻ” cho từng sản phẩm, nhưng nó chỉ giới hạn số lượng của chính sản phẩm đó, không chặn được khách mua 2 sản phẩm khuyến mãi khác nhau trong cùng một đơn. Muốn giới hạn theo cả giỏ hàng thì bạn phải code thêm nhé.
Mục lục nội dung bài viếtHiện
Thêm code giới hạn sản phẩm khuyến mãi
Bạn chỉ cần thêm code dưới vào cuối file functions.php của child theme nhé. Nhớ sao lưu file trước khi sửa, và đừng chèn vào theme cha vì khi theme cập nhật sẽ mất code.
<?php
// Giới hạn mỗi khách chỉ mua 1 sản phẩm khuyến mãi trong mỗi đơn hàng
// Cách dùng: dán code này vào cuối file functions.php của child theme,
// WooCommerce tự chặn khi khách thêm sản phẩm khuyến mãi thứ hai vào giỏ
add_filter('woocommerce_add_to_cart_validation', 'nn_gioi_han_san_pham_khuyen_mai', 10, 4);
function nn_gioi_han_san_pham_khuyen_mai($duoc_phep, $product_id, $so_luong, $variation_id) {
$san_pham = wc_get_product($product_id);
if (!is_object($san_pham) || !$san_pham->is_on_sale()) {
return $duoc_phep;
}
if ($so_luong > 1) {
wc_add_notice('Sản phẩm khuyến mãi chỉ được mua tối đa 1 cái mỗi đơn hàng.', 'error');
return false;
}
if (!is_object(WC()->cart)) {
return $duoc_phep;
}
foreach (WC()->cart->get_cart() as $item) {
$sp_trong_gio = $item['data'];
if (is_object($sp_trong_gio) && $sp_trong_gio->is_on_sale()) {
wc_add_notice('Mỗi đơn hàng chỉ được mua 1 sản phẩm khuyến mãi. Bạn hãy thanh toán đơn hiện tại trước nhé.', 'error');
return false;
}
}
return $duoc_phep;
}
add_filter('woocommerce_update_cart_validation', 'nn_gioi_han_cap_nhat_gio_khuyen_mai', 10, 4);
function nn_gioi_han_cap_nhat_gio_khuyen_mai($duoc_phep, $cart_item_key, $values, $so_luong) {
if ($so_luong <= 1) {
return $duoc_phep;
}
$san_pham = isset($values['data']) ? $values['data'] : null;
if (is_object($san_pham) && $san_pham->is_on_sale()) {
wc_add_notice('Sản phẩm khuyến mãi chỉ được mua tối đa 1 cái mỗi đơn hàng.', 'error');
return false;
}
return $duoc_phep;
}
Code trên có hai phần. Phần đầu móc vào filter woocommerce_add_to_cart_validation, chạy ngay trước khi WooCommerce cho sản phẩm vào giỏ: nếu sản phẩm đang giảm giá (hàm is_on_sale() trả về đúng) mà khách chọn số lượng lớn hơn 1 thì chặn và hiện thông báo lỗi, nếu giỏ hàng đã có sẵn một sản phẩm khuyến mãi khác thì cũng chặn và báo khách thanh toán đơn hiện tại trước. Phần sau móc vào filter woocommerce_update_cart_validation để chặn luôn đường vòng: khách đã có sản phẩm khuyến mãi trong giỏ mà tăng số lượng lên 2 ở trang giỏ hàng thì cũng bị chặn, không lọt qua được.
Kiểm tra giới hạn trên shop
Bạn thêm một sản phẩm đang giảm giá vào giỏ, rồi thêm tiếp một sản phẩm khuyến mãi khác, WooCommerce sẽ hiện thông báo lỗi đỏ “Mỗi đơn hàng chỉ được mua 1 sản phẩm khuyến mãi” và không thêm sản phẩm thứ hai vào giỏ. Thử tăng số lượng sản phẩm khuyến mãi trong giỏ lên 2 rồi bấm cập nhật giỏ hàng thì cũng bị chặn với thông báo tương tự. Sản phẩm không giảm giá thì vẫn thêm và mua bình thường, không bị ảnh hưởng.

Lưu ý khi dùng
Quy tắc này tính theo mỗi đơn hàng (giỏ hàng hiện tại), khách vẫn mua được sản phẩm khuyến mãi khác ở đơn sau, đúng với cách hầu hết shop chạy chương trình “mỗi khách 1 sản phẩm”. “Sản phẩm khuyến mãi” ở đây là sản phẩm đang có giá sale theo hàm is_on_sale(), kể cả giảm giá theo lịch đã hẹn trước. Nếu shop bạn muốn giới hạn theo một danh mục riêng thay vì mọi sản phẩm giảm giá thì thay điều kiện is_on_sale() bằng kiểm tra danh mục của sản phẩm. Tính năng này đi chung với bài code đặt số lượng mua tối thiểu cho sản phẩm trong WooCommerce là thành combo kiểm soát số lượng mua cho shop chạy khuyến mãi.
Kết luận
Vậy là chỉ với 1 đoạn code ngắn bạn đã giới hạn mỗi khách chỉ mua 1 sản phẩm khuyến mãi trong WooCommerce rồi nhé. Tính năng này đi chung với bài code đặt số lượng mua tối thiểu cho sản phẩm trong WooCommerce và bài code tự động áp dụng mã giảm giá khi khách vào link trong WooCommerce là thành bộ công cụ chạy khuyến mãi gọn gàng cho shop WooCommerce.
Nếu cần mình kèm 1-1 về WooCommerce thì cứ liên hệ mình nhé.
