如何在某些條件下隱藏 WooCommerce 運輸方式

已發表: 2020-06-15

運輸方式是客戶在購買任何商品時在結賬時看到的服務和費用。 這將是電子商務商店獲得順暢交付體驗的重要選擇。

作為電子商務解決方案,WooCommerce 還提供免費送貨統一費率本地取貨等送貨方式,可以根據地點為不同的送貨區域設置。 例如,免費送貨選項僅適用於靠近商店位置的特定範圍的郵政編碼,而統一費率選項適用於送貨區域的其他部分。

Default Shipping Methods
默認運輸方式

插件可以很容易地實現基於位置的運輸選項,但在某些情況下,位置不發揮重要作用,店主很難實現這一點。 條件可能是:

  1. 如果訂單重量超過一定數量的磅或公斤,則某些運輸方式(如免費送貨)將不可用。
  2. 某些運輸方式的可用性還取決於數量或整個訂單的價格。 例如,如果訂單總額超過 250 美元,則應僅提供免費送貨方式,不提供付費送貨方式。

可能有更多此類條件需要在結帳期間顯示或隱藏運輸方式,但在這篇文章中,我們將解釋上述 2。要為您的 WooCommerce 商店實現這一點,您可以添加代碼片段或使用任何運費可用的插件

使用代碼片段

讓我們以上面提到的條件 1 為例,如果訂單重量超過 5 公斤,則不應提供免費送貨服務。 您可以通過在當前活動主題的 functions.php 文件中添加以下代碼來實現此目的。

注意:這些更改可以被當前主題的更新覆蓋,因此建議創建一個子主題並在子主題的functions.php文件中添加所需的代碼片段。 或者您可以使用代碼片段插件添加自定義片段。

 /** 
 * 訂單重量超過 10 公斤時隱藏免費送貨。 
 * 
 * @param array $rates 為包找到的費率數組。 
 * @return 數組 
 */ 
功能 ts_hide_free_shipping_for_order_weight( $rates, $package ) { 
    $order_weight = WC()->cart->get_cart_contents_weight(); 
 
    如果 ( $order_weight > 5 ) { 
        foreach( $rates as $rate_id => $rate_val ) { 
            if ('free_shipping' === $rate_val->get_method_id()) { 
                未設置($rates[$rate_id]);
            } 
        } 
    } 
    返回 $rates; 
} 

add_filter('woocommerce_package_rates', 'ts_hide_free_shipping_for_order_weight', 100, 2);

這裡woocommerce_package_rates過濾器用於修改購物車上的計算費率。 它包含將產品添加到購物車後可用的所有運費。 因此,如果訂單重量超過 5 公斤,我們需要從此過濾器返回的數組中取消設置所需的運輸方式,在我們的例子中為免費運輸。

產品頁面:

Product with 6kg weight
產品重量 6kg

帶有運輸方式的購物車頁面:

Free shipping is not available for the product with weight more than 5kg
重量超過 5 公斤的產品不提供免費送貨服務

在 WooCommerce 購物車上隱藏運輸方式的另一個例子是,當訂單總額超過 250 美元時,在結賬時只允許免費送貨。 這可以通過在 functions.php 文件中添加以下代碼來實現。

 /**
 * 當訂單總額超過 250 美元時隱藏運費。
 *
 * @param array $rates 為包找到的費率數組。
 * @return 數組
 */
函數 ts_hide_shipping_for_order_total( $rates ) {
  $免費 = 數組();

  $order_total = WC()->購物車->get_subtotal();
  
  如果($order_total > 250){
    foreach ( $rates as $rate_id => $rate ) {
      if ( 'free_shipping' === $rate->get_method_id() ) {
        $free[ $rate_id ] = $rate;
      }
    }
  }
  返回 ! 空($免費)? $free : $rates;
}
add_filter('woocommerce_package_rates','ts_hide_shipping_for_order_total',100);

在這裡,當訂單總額超過 250 美元時,過濾器會返回一個只有免費送貨方式的數組,否則會返回所有運費。

Hide Shipping Rate when Order total is more than $250
訂單總額超過 250 美元時隱藏運費

在上面的例子中,我們參考了 Free Shipping 方法,所以使用的方法 id 是 free_shipping。 要更改其他運輸方式,方法 ID 為:

本地取貨: local_pickup
統一費率: flat_rate

get_method_id() 函數僅獲取所有運輸區域的 3 種方法的方法 ID,而不是單個運輸區域的單個方法的方法 ID,因此它將隱藏結帳期間可用的所有統一費率、本地取貨或免費送貨方式。 但是,如果您想隱藏特定的運輸方式,則需要使用運輸方式 ID 和實例 ID 的組合。

例如,“flat_rate:3”,其中 3 是為數據庫中某個區域的每種運輸方式存儲的唯一實例 ID。 您可以通過右鍵單擊運輸方式並在瀏覽器的開發人員工具中檢查元素來找到運輸方式的實例 ID。

Instance ID

為運輸方式使用不同的 WooCommerce 擴展

有多種付費或免費擴展可用於為不同條件設置運輸方式。 一些最常用的插件是:

付費插件:

  1. WooCommerce 的Table Rate Shipping :此插件擴展了WooCommerce 的默認運輸選項,為您提供高度可定制的運輸選項。
  2. WooCommerce 的高級統一運費插件:此插件將幫助您根據高級運費規則配置商店的運費。
  3. Jeroen sormani 的 WooCommerce Advance Shipping 插件:此插件允許您在結帳期間根據設定的規則啟用運輸方式。 可以為不同的購物車詳細信息、產品詳細信息或不同的用戶詳細信息設置規則。
  4. WP Desk 為 WooCommerce 提供的靈活運輸專業版:此插件允許您根據特定項目、購物車行項目、價格或重量規則啟用運輸方式。

免費插件:

上述一些插件也有免費版本,但功能有限。 他們是:

  1. Jeroen Sormani 的 WooCommerce Advanced Free Shipping:這是 WooCommerce Advanced Shipping 插件的免費版本。 這兩個插件的唯一區別是這個插件只允許設置規則的免費送貨方式,而付費插件允許所有送貨方式。
  2. WP Desk 為 WooCommerce 提供靈活運輸:這是 WooCommerce 插件的靈活運輸 Pro 的免費版本。 它只允許為價格和重量設置運輸方式。

有關上述插件的詳細說明,您可以查看此帖子。

結論

正如我們在這篇文章中看到的那樣,可以通過簡單地在您的網站上添加代碼片段或使用各種可用的插件來實現提前發貨選項。 因此,您可以試用給定的代碼片段或試用任何插件,讓我們知道這是否對您的 WooCommerce 商店有益。