Tự động hủy đơn hàng WooCommerce sau 1 giờ nếu không thanh toán
Nếu khách hàng đặt hàng nhưng không thanh toán thì bạn có thể vào phần quản lý đơn hàng để huỷ chúng đi nhưng như thế sẽ rất mất thời gian nếu website của bạn có lượng khách đặt hàng nhiều, bài viết này sẽ chia sẽ code giúp bạn làm việc này hoàn toàn tự động.
Chèn code này vào function
Trên đây là đoạn code tự động hủy đơn hàng trong WooCommerce.
Ý nghĩa của code như sau:
Trạng thái đơn hàng là pending
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function ngoinhaweb_cancel_failed_pending_order_event( $order_id ) { if ( ! wp_next_scheduled( 'ngoinhaweb_cancel_failed_pending_order_after_one_hour', array( $order_id ) ) ) { wp_schedule_single_event( time() + 3600, 'ngoinhaweb_cancel_failed_pending_order_after_one_hour', array( $order_id ) ); } } add_action( 'ngoinhaweb_cancel_failed_pending_order_after_one_hour', 'ngoinhaweb_cancel_order' ); function ngoinhaweb_cancel_order( $order_id ) { $order = wc_get_order( $order_id ); wp_clear_scheduled_hook( 'ngoinhaweb_cancel_failed_pending_order_after_one_hour', array( $order_id ) ); if ( $order->has_status( array( 'pending' ) ) ) { $order->update_status( 'cancelled', 'Tự động huỷ đơn hàng sau 1h nếu không được thanh toán' ); } } |
woocommerce_order_status_pending
, hàm ngoinhaweb
_cancel_failed_pending_order_event
được gọi, hàm ngoinhaweb_cancel_failed_pending_order_event
sẽ tạo ra sự kiện bị trì hoãn để hủy đơn hàng sau một giờ.
Hàm ngoinhaweb
_cancel_failed_pending_order_event
kiểm tra xem sự kiện bị hủy đã được lên lịch cho đơn hàng được chỉ định hay chưa, nếu chưa nó sẽ tạo một sự kiện có độ trễ một giờ.
Sau khi thời gian được chỉ định, hàm ngoinhaweb
_cancel_order
được gọi, hàm này sẽ hủy đơn đặt hàng nếu trạng thái của nó vẫn là “đang chờ xử lý”.
Hàm ngoinhaweb
_cancel_order
truy xuất một đối tượng đơn hàng theo ID đơn hàng và xóa sự kiện hủy đang chờ xử lý cho đơn hàng, nếu trạng thái đơn hàng vẫn đang chờ xử lý thì cập nhật trạng thái là cancelled
Bạn có thể sử dụng code trên trên website của bạn để tự động hủy đơn đặt hàng trong WooCommerce, áp dụng được cả khi bạn không sử dụng quản lý hàng tồn kho hoặc chỉ muốn hủy một số trạng thái đơn hàng nhất định.