Mới đây, mình nhận được yêu cầu từ khách phải thiết lập chế độ Giao hàng miễn phí trên Woocommerce cho một chiến dịch khuyến mãi mới kéo dài 1 tuần. Sau đó, chế độ giao hàng miễn phí sẽ tự động tắt.
Thiết lập phương thức Giao hàng miễn phí trong Woocommerce quá dễ. Truy cập vào mục Khu vực giao hàng trong trang Cài đặt của Woocommerce, thêm phương thức giao hàng mới là xong.
Tuy nhiên do chiến dịch bắt đầu lúc 12:00 đêm và kết thúc cũng 12:00 đêm, mà mình lại không muốn thức khuya để chỉnh chọt website. Do đó, phải áp dụng cách để tự động hoá việc ẩn / hiện phương thức Giao Hàng Miễn Phí tuỳ theo điều kiện thời gian.
Ẩn giao hàng miễn phí ngoài thời gian khuyến mãi
Phương thức Giao hàng miễn phí sẽ được kích hoạt sẵn. Mình sẽ viết thêm vài dòng code để ẩn nó ra khỏi trang thanh toán khi nằm ngoài giai đoạn khuyến mãi.
Woocommerce cung cấp sẵn filter woocommerce_package_rates
để tuỳ biến phương thức giao hàng. Mình sử dụng đoạn code sau để tự động tắt phương thức Giao hàng miễn phí ngoài khung giờ khuyến mãi.
add_filter( 'woocommerce_package_rates' , 'thuanbui_customize_shipping', 10, 2 );
function thuanbui_customize_shipping( $rates, $package ) {
if ( ! $rates ) return;
if (current_time('dmY') < '23092021' || current_time('dmY') > '30092021') {
unset($rates['free_shipping:23']); // remove Free Shipping
}
return $rates;
}
Giải thích đôi chút:
if (current_time('dmY') < '23092021' || current_time('dmY') > '30092021')
: kiểm tra xem ngày hiện tại có nằm trong khoảng thời gian khuyến mãi 23/09/2021 đến 30/09/2021 khôngunset($rates['free_shipping:23'])
nếu có, ẩn phương thức giao hàng `free_shipping:18`
Để tìm đúng id của phương thức giao hàng, kiểm tra bằng cách truy cập vào trang thanh toán, mở Inspect panel và tìm giá trị value
của phương thức giao hàng cần thiết lập.
Ẩn giao hàng tốc hành Grab / Ahamove ngoài giờ làm việc
Shop YCB.vn của mình có áp dụng phương thức giao hàng tốc hành trong ngày bằng Grab / Ahamove cho các đơn hàng nội thành TP.HCM. Mình chỉ muốn phương thức này xuất hiện trên web trong giờ làm việc. Đổi code lại đôi chút như sau
add_filter( 'woocommerce_package_rates' , 'ycb_shipping', 10, 2 );
function ycb_shipping( $rates, $package ) {
if ( ! $rates ) return;
if (current_time('D') == 'Sun' || current_time('G') <'07' || current_time('G') >= '18') {
unset($rates['flat_rate:29']); // remove Grab - Ahamove shping
}
return $rates;
}
Lệnh if (current_time('D') == 'Sun' || current_time('G') <'07' || current_time('G') >= '18')
kiểm tra 2 điều kiện:
- Hôm nay có phải chủ nhật không?
- Thời gian hiện tại có phải nằm ngoài khung 7h – 18h không?
Nếu thoả một trong các điều kiện trên, ẩn phương thức giao hàng flat_rate:29
ra khỏi trang thanh toán.
Bạn có thể tuỳ biến dòng lệnh if
tuỳ thuộc vào nhu cầu sử dụng của mình. Có thể kiểm tra điều kiện thông tin đơn hàng, cân nặng, danh mục sản phẩm,… để ẩn phương thức thanh toán tương ứng.
Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!