[WooCommerce] 接收商品無庫存通知的 No Stock Hook

本篇文章更新時間:2020/05/05
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~


先前寫過 [WordPress] FastCGI 快取網站加速,Nginx Helper 特別加強版本 這篇裡的外掛 Nginx FastCGI Cache 清除小幫手 ,這幾天碰到一個快取邏輯問題。

如果商品無庫存了,也要把商品頁面快取清除,避免看得到有庫存的顯示,等下單後才通知沒庫存。

這件事就讓我在想可以怎麼切入判斷,嘗試過「建立訂單的時候」,從訂單去拆商品列,再判斷商品庫存。

對,過程太繞,這樣還是不夠快!想說後台有發信通知的機制,應該能找到對應的方法切入。果不其然找到 woocommerce_no_stock 這個 Hook。

woocommerce_no_stock 會自動於商品無庫存時觸發,傳入參數就是該無庫存商品。從這商品物件中取回快取的商品頁面連結,進行清除就好囉~

補上的程式碼片段如下:

//商品無庫存時,清除商品頁面快取
function mxp_wc_check_product_qty_cache($product_obj) {
    if (is_object($product_obj)) {
        $product_id = $product_obj->get_id();
        if ('product_variation' === $product_obj->post_type) {
            $product_id  = $product_obj->get_parent_id();
            $product_url = get_permalink($product_id);
            mxp_nginx_fastcgi_purge_url($product_url);
        } else {
            //取得簡單商品連結
            $product_url = get_permalink($product_id);
            mxp_nginx_fastcgi_purge_url($product_url);
        }
    }
}
add_action('woocommerce_no_stock', 'mxp_wc_check_product_qty_cache', 11, 1);

注意方法內有取得商品連結的邏輯,可變商品如果直接取連結會帶有商品屬性的 Query 參數,這一般購物情況下不會快取到,所以要抓上層商品的連結來處理。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

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