Active License Elementor Pro chỉ với 300k/năm/domain Shop Now
Mới Dịch vụ thiết kế website, xử lý mã độc & tối ưu tốc độ chuyên sâu

Code chỉ hiện miễn phí vận chuyển và nhận tại cửa hàng khi đủ điều kiện trong WooCommerce

Trang thanh toán với mục Phương thức vận chuyển chỉ còn 2 lựa chọn: 'Miễn phí vận chuyển' 0₫ đang được chọn và 'Nhận tại cửa hàng' miễn phí

Bài viết này mình sẽ hướng dẫn bạn cách chỉ hiện miễn phí vận chuyển và nhận tại cửa hàng khi đủ điều kiện trong WooCommerce nhé.

Khách đã mua đủ ngưỡng để được miễn phí vận chuyển mà ở trang thanh toán vẫn thấy thêm cả đống phương thức trả phí thì rất dễ bấm nhầm, vừa mất tiền ship oan vừa phải nhờ shop sửa đơn. WooCommerce 9.9 trở lên đã có sẵn tùy chọn ẩn hết phương thức khác khi đủ miễn phí vận chuyển, nhưng tùy chọn đó ẩn luôn cả Nhận tại cửa hàng, trong khi nhiều shop vẫn muốn khách thấy nút nhận tại cửa hàng để ghé lấy cho nhanh. Muốn ẩn phương thức trả phí mà vẫn giữ lại Nhận tại cửa hàng thì bạn phải code thêm nhé.

Thêm code chỉ hiện miễn phí vận chuyển và nhận tại cửa hàng

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. Trước khi thêm code, bạn cần tạo sẵn phương thức Miễn phí vận chuyển có đặt điều kiện tối thiểu và phương thức Nhận tại cửa hàng trong khu vực giao hàng của shop (WooCommerce → Cài đặt → Vận chuyển).

<?php
// Chỉ hiện Miễn phí vận chuyển và Nhận tại cửa hàng khi giỏ đủ điều kiện miễn phí vận chuyển
// Các phương thức trả phí khác sẽ bị ẩn; giỏ chưa đủ điều kiện thì mọi phương thức vẫn hiện như cũ
// Lưu ý: WooCommerce 9.9 trở lên đã có sẵn tùy chọn ẩn hết phương thức khác, nhưng tùy chọn đó
// ẩn luôn cả Nhận tại cửa hàng — muốn giữ lại Nhận tại cửa hàng thì phải dùng code dưới đây
add_filter('woocommerce_package_rates', 'nn_chi_hien_freeship_va_nhan_tai_cua_hang', 10, 1);
function nn_chi_hien_freeship_va_nhan_tai_cua_hang($rates) {
    $co_mien_phi = false;
    foreach ($rates as $phi) {
        if ('free_shipping' === $phi->method_id) {
            $co_mien_phi = true;
            break;
        }
    }
    if (!$co_mien_phi) {
        return $rates;
    }
    $giul = array();
    foreach ($rates as $ma => $phi) {
        if ('free_shipping' === $phi->method_id || 'local_pickup' === $phi->method_id) {
            $giul[$ma] = $phi;
        }
    }
    return $giul;
}

Code trên móc vào filter woocommerce_package_rates để lọc lại danh sách phương thức vận chuyển trước khi WooCommerce hiện ra ở trang thanh toán. Hàm duyệt qua các mức phí, nếu không có mức nào có method_id là free_shipping thì trả nguyên danh sách về như cũ, giỏ chưa đủ điều kiện thì mọi phương thức vẫn hiện đầy đủ. Chỉ khi giỏ đã đủ điều kiện miễn phí vận chuyển thì hàm mới giữ lại đúng 2 phương thức là free_shipping và local_pickup, còn các phương thức trả phí như giao hàng tận nơi tính phí thì bị loại khỏi danh sách. Vì chỉ còn 2 lựa chọn nên khách khó bấm nhầm, mà vẫn ghé cửa hàng lấy hàng được nếu muốn.

Kiểm tra ở trang thanh toán

Bạn bỏ hàng vào giỏ cho đủ ngưỡng miễn phí vận chuyển rồi ra trang thanh toán, mục phương thức vận chuyển sẽ chỉ còn 2 dòng là Miễn phí vận chuyển và Nhận tại cửa hàng. Bỏ bớt hàng xuống dưới ngưỡng rồi tải lại trang thì các phương thức trả phí hiện lại đầy đủ như cũ.

Trang thanh toán với mục Phương thức vận chuyển chỉ còn 2 lựa chọn: 'Miễn phí vận chuyển' 0₫ đang được chọn và 'Nhận tại cửa hàng' miễn phí
Kết quả: ở trang thanh toán chỉ còn 2 phương thức vận chuyển là Miễn phí vận chuyển và Nhận tại cửa hàng, các phương thức trả phí đã bị ẩn.

Lưu ý khi dùng

WooCommerce lưu phí vận chuyển đã tính vào session của giỏ hàng, nên sau khi thêm code bạn cần xóa giỏ rồi bỏ hàng lại từ đầu mới thấy kết quả đổi, hoặc vào WooCommerce → Trạng thái → Công cụ rồi bấm Xóa transients. Code này chỉ chạy với trang thanh toán dạng shortcode cổ điển và trang giỏ hàng cổ điển, nếu shop bạn đang dùng Checkout block mới của WooCommerce thì filter này vẫn chạy vì block cũng dùng chung cơ chế tính phí vận chuyển của WooCommerce, nhưng bạn nên tự kiểm tra lại trên shop của mình. Muốn giữ thêm phương thức trả phí nhanh như giao hỏa tốc thì bạn thêm || ‘flat_rate’ === $phi->method_id vào điều kiện giữ lại trong vòng lặp thứ hai.

Kết luận

Vậy là chỉ với 1 đoạn code ngắn bạn đã chỉ hiện miễn phí vận chuyển và nhận tại cửa hàng khi đủ điều kiện trong WooCommerce rồi nhé. Tính năng này đi chung với bài code thêm đếm ngược khuyến mãi cho sản phẩm trong WooCommerce và bài code hiển thị số tiền tiết kiệm được ở giỏ hàng trong WooCommerce là thành combo chốt đơn cho shop đang chạy khuyến mãi khá tốt.

Nếu cần mình kèm 1-1 về WooCommerce thì cứ liên hệ mình nhé.

Nhân Viên

Nhân Viên

Web Developer & WordPress Expert

Ngọc Nguyễn - Chuyên gia thiết kế Website WordPress, tối ưu tốc độ 90+ và xử lý dứt điểm mã độc. Đam mê chia sẻ kiến thức hữu ích đến cộng đồng lập trình & webmaster.

Để lại bình luận hoặc thắc mắc

Email của bạn sẽ không được hiển thị công khai.

Ngọc Nguyễn
Ngọc Nguyễn
| Thiết kế Website | Hosting tốc độ cao | Giải pháp hạ tầng | Fix lỗi WordPress, mã độc | Tối ưu tốc độ | Thiết kế Website | Hosting tốc độ cao | Giải pháp hạ tầng | Fix lỗi WordPress, mã độc | Tối ưu tốc độ
Tư vấn miễn phí