Featured image of post 在 WooCommerce 中將缺貨商品顯示在最後

在 WooCommerce 中將缺貨商品顯示在最後

在 WooCommerce 中將缺貨商品顯示在最後,在商店中先展示有貨商品,以提高用戶體驗。

最後更新
約 703 字

前言

在使用 WooCommerce 管理線上商店時,優先顯示目前有庫存的產品至關重要。將有庫存的產品放在產品列表的最前面,或將缺貨產品放在最後,可以提升顧客體驗,增加他們找到並購買可用商品的機會。本文將探討一個實現此目標的程式碼解決方案。

排序有庫存的產品

默認情況下,WooCommerce 並不提供根據庫存狀態排序產品的功能。不過,我們可以通過實現一段自定義程式碼來克服這一限制,該程式碼將修改產品查詢,確保有庫存的產品在產品列表中顯示在前面。

在 functions.php 中添加程式碼

為了實現所需的功能,我們將使用 WordPress 和 WooCommerce 提供的過濾器和鉤子。讓我們逐步深入這段程式碼。

以下是初始程式碼區塊:

1
2
3
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
    add_filter('posts_clauses', 'order_by_stock_status', 2000);
}

在這段程式碼中,我們使用 in_array 函數檢查 WooCommerce 插件是否啟用。如果啟用,我們就添加自定義過濾器。

我們解決方案的核心在於 order_by_stock_status 函數,該函數附加到 posts_clauses 過濾器。讓我們詳細了解這個函數:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function order_by_stock_status($posts_clauses) {
    global $wpdb;
  
    if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
        $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
        $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
        $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
    }
    
    return $posts_clauses;
}

在這個函數中,我們首先檢查當前頁面是否為 WooCommerce 商店頁面、產品分類頁面或產品標籤頁面。這樣可以確保程式碼修改僅應用於相關頁面。

接著,我們在查詢中添加內部連接,將 wp_posts 表與 wp_postmeta 表根據 post_id 連接。這樣可以檢索與每個產品相關的庫存狀態信息。

然後,我們修改查詢的 orderby 子句。通過將 istockstatus.meta_value ASC 添加到現有的排序標準中,我們確保有庫存的產品優先顯示。

最後,我們添加一個 where 子句,以過濾掉沒有有效庫存狀態的產品。這樣可以確保僅包含具有定義庫存狀態的產品。

實施

要在您的 WooCommerce 商店中實施此程式碼解決方案,請按照以下步驟操作:

  1. 訪問主題的 functions.php 文件。
  2. 將上述的兩段程式碼片段粘貼到該文件中。
  3. 保存文件。
  4. 清除快取,享受結果。

使用 Hugo 建立
主題 StackJimmy 設計