本篇文章更新時間:2021/11/26
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
今天碰到的需求是一個「預定到貨日」外掛的地雷,雖然可以在下單前選擇預定到貨日,但因為這樣下單的商品,並不一定會馬上下單。
如果實際上下單日都超過預定到貨日了怎辦?
BUG 就是這樣發生XD
的確是可以選好日期準備下單,但有不少人都習慣等一個優惠才去真的結帳。那這個功能的選擇就可能會有問題發生!
這類型附加在商品有額外選項的外掛,都是針對下單商品補上 meta 描述來處理。 WooCommerce 下單後到購物車(Cart)時會是一個單獨專屬消費者的物件(Line Item),而不是單純用「商品」來看。
所以如果上述情境發生時,要在 Cart 購物車裡去檢查這些 meta 資訊是否有過時就可以用下列方法:
function mxp_check_cart_product($title, $cart_item, $cart_item_key) {
$_product = $cart_item;
$prdd_date = $_product['prdd_date'];
if (isset($prdd_date) && $prdd_date != "") {
$ts = strtotime($prdd_date);
if ($ts < time()) {
$title .= "(此商品預定到貨日期錯誤,請重新選購)";
WC()->cart->remove_cart_item($cart_item_key);
wc_add_notice( $title.' 商品由於預定到貨日期已經過期,請重新下單選購。', 'error' );
}
}
return $title;
}
add_filter('woocommerce_cart_item_name', 'mxp_check_cart_product', 11, 3);
每一個購物車下單商品都會過這邏輯去檢查,有問題還可以順便改購物車商品標題提示消費者。
範例除了移除掉購物車滿足條件的商品外,還補上錯誤警示,這樣一來真的碰到這情境,到了結帳頁面也至少還會看到警示,滿好切入操作的時機點!
就算程式碼裡有寫移除購物車的方法,但實際上觸發不會這麼即時,所以消費者還是會看到這商品在購物車,只是名字上補了備註提示。