本篇文章更新時間:2021/11/26
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持


今天碰到的需求是一個「預定到貨日」外掛的地雷,雖然可以在下單前選擇預定到貨日,但因為這樣下單的商品,並不一定會馬上下單。

如果實際上下單日都超過預定到貨日了怎辦?

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 .= "<strong>(此商品預定到貨日期錯誤,請重新選購)</strong>";
            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);

每一個購物車下單商品都會過這邏輯去檢查,有問題還可以順便改購物車商品標題提示消費者。

範例除了移除掉購物車滿足條件的商品外,還補上錯誤警示,這樣一來真的碰到這情境,到了結帳頁面也至少還會看到警示,滿好切入操作的時機點!

就算程式碼裡有寫移除購物車的方法,但實際上觸發不會這麼即時,所以消費者還是會看到這商品在購物車,只是名字上補了備註提示。


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon