如何在 WooCommerce 中添加自定義運輸方式
已發表: 2020-09-01如果您熟悉 WooCommerce,您就會知道它是一個很棒的免費電子商務解決方案,具有一組非常有用的功能。 突出的是 WooCommerce 在開發時考慮了可擴展性,類似於 WordPress 的模塊化。
但是,如果您需要 WooCommerce 提供的額外內容,您通常會發現 WooCommerce 無法滿足您的所有需求,例如,如果您想添加自定義運輸方式。 不過,不要擔心,因為在這個簡短的教程中,您將學習如何為 WooCommerce 創建一個簡單的運輸方法,它將計算運輸成本。
此外,您將學習如何為我們的插件添加一些限制,以便某些國家/地區可以使用運輸方式。
運輸方式的自定義運輸規則
在本節中,我們將為我們將用於創建代碼的運輸方式創建自定義運輸規則。 我們將定義運輸方式如何計算成本以及它可以運送到哪裡。 這意味著成本將取決於我們需要運送到的重量和區域。
對於這個例子,我們將運送到美國、加拿大、德國、英國、意大利、西班牙和肯尼亞。 肯尼亞將成為我們的 0 區 10 美元,意大利 1 區 30 美元,西班牙 2 區 50 美元,英國 2 區 50 美元,美國和加拿大 3 區 70 美元。
對於重量,我們將定價如下:0-10公斤免費,11-30公斤5美元,31-50公斤10美元,51-100公斤20美元。
您可能已經準備好開始編碼,但還沒有! 首先,您需要了解WooCommerce Shipping API 。 當您想要創建自定義運輸方式時,您需要從 WooCommerce 抽像類 WC_Shipping_Method 擴展該類。 它有一些定義的屬性,它們是:
-
$id
:我們的運輸的 ID(slug,關鍵字),這是必需的。 -
$number
:這是一個整數 ID。 -
$method_title
:我們在管理員中顯示的運輸名稱。 -
$method_description
:在管理員中顯示的我們運輸的簡短描述(可選)。 -
$enabled
: String Boolean,“yes”或“no”,它提供了我們的運輸是否啟用以及是否可以使用的信息。 -
$title
:用於在我們的網站上顯示我們的運輸名稱。 -
$availability
:這定義了運輸是否可用。 -
$countries
:啟用此方法的國家/地區數組。 默認值為空數組。 -
$tax_status
:默認值是應稅的。 如果一個項目是應稅的,那麼將收取稅款。 -
$fee
: 默認值為 0 -
$minimum_fee
:該方法的最低費用,默認值為 null。 -
$has_settings
:這定義了這個方法是否有任何設置。 默認值是true。 -
$supports
:包含此方法支持的功能的數組。 默認值為空數組。 -
$rates
:一系列費率,必須填充以註冊運費。 默認值為空數組。
WC_Shipping_Method 中定義的方法是:
-
is_taxable()
:這將返回我們是否需要在運費之上計算稅金。 -
add_rate( $args = array() )
:這會將參數 $args 中定義的運費推送到屬性 $rates 中。 -
has_settings()
:這將返回屬性 $has_settings 的值。 -
is_available()
:如果可以送貨,並且在屬性 $countries 中設置了國家,並且屬性 $availability 設置為包括、特定或排除的值,則返回 true 或 false . -
get_title()
:這將返回此運輸的標題。 -
get_fee( $fee, $total )
:這將根據解析的 $fee 和 $total 返回此次運輸的費用值。 -
supports( $feature )
:如果此運輸方法支持某個功能,則返回。
因為WC_Shipping_Method類擴展了WC_Settings_API類,所以屬性和方法比較多,為了簡單起見,這裡不再贅述。
此外,還需要定義其他方法,以便運輸可以獲取或設置設置併計算運輸的實際成本。 此處列出的這些方法:
-
init()
:這將創建表單字段和設置。 但是,它可以有不同的命名,只要我們使用它裡面的方法,並在__constructor方法中調用它。 -
calculate_shipping( $package )
:此方法用於計算此運輸的成本,而 package 是一個包含要運輸的產品的數組。
我想把重點放在calculate_shipping 方法上。 對於我們的示例,我們將使用此方法並將其添加到 add_rate 方法中。 此方法將接受具有多個選項的數組,例如:
-
id
:這是費率的 ID。 -
label
:這是費率的標籤。 -
cost
: 運費金額。 -
taxes
:它接受一系列稅或不接受稅,因此稅由 WooCommerce 計算。 如果你不希望它接受稅收,它可以接受虛假。 -
calc_tax
:這接受 per_order 或 per_item。 如果您使用 per_item,則需要提供一系列成本。
我們將使用 WordPress 過濾器來獲取將我們的運輸方法添加到已註冊方法的數組中的數組,方法是使用在 WooCommerce 插件中定義的 WordPress 過濾器傳遞我們的類的名稱。 該過濾器稱為 woocommerce_shipping_methods。
有了這些,現在讓我們進入這個簡短教程的編碼部分,這樣你就可以理解我將要分享的 PHP 片段中的整個概念。
a) 創建新運輸類別的步驟
在本節中,我們將創建我們的運輸方式作為擴展 WooCommerce 的新插件。
- 首先,您需要打開wp-content > plugins並創建一個新文件夾。 為此,我將使用名稱njengah -shipping
- 然後,您需要創建一個同名的文件njengah –shipping.php
- 在此文件中添加以下代碼:
<?php /** * 插件名稱:Njengah Shipping * 插件 URI:https://njengah.com/plugins/ * 描述: * 版本:1.0.0 * 作者:喬恩傑加 * 作者 URI:https://njengah.com s */ 如果(!定義('WPINC')){ 死; } /* * 檢查 WooCommerce 是否處於活動狀態 */ 如果(in_array('woocommerce/woocommerce.php',apply_filters('active_plugins',get_option('active_plugins')))){ 功能 njengahplus_shipping_method() { 如果(!class_exists('NjengahPlus_Shipping_Method')){ 類 NjengahPlus_Shipping_Method 擴展 WC_Shipping_Method { /** *您的運輸類別的構造函數 * * @訪問公共 * @return 無效 */ 公共函數 __construct() { $this->id = 'njengahplus'; $this->method_title = __( 'NjengahPlus Shipping', 'njengahplus' ); $this->method_description = __( 'NjengahPlus 的自定義運輸方式', 'njengahplus' ); $this->init(); $this->enabled = isset($this->settings['enabled']) ? $this->settings['enabled'] : '是'; $this->title = isset($this->settings['title']) ? $this->settings['title'] : __( 'NjengahShipping', 'njengahplus' ); } /** * 初始化你的設置 * * @訪問公共 * @return 無效 */ 函數初始化(){ // 加載設置 API $this->init_form_fields(); $this->init_settings(); // 如果您有任何定義,請在管理員中保存設置 add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) ); } /** * 定義此運輸的設置字段 * @return 無效 */ 函數 init_form_fields() { // 我們將在這裡添加我們的設置 } /** * 此功能用於計算運費。 在這個函數中,我們可以檢查重量、尺寸和其他參數。 * * @訪問公共 * @param 混合 $package @return 無效 */ 公共功能calculate_shipping($包){ // 我們將在這裡添加成本、費率和邏輯 } } } } add_action('woocommerce_shipping_init', 'njengahplus_shipping_method'); 功能 add_njengahplus_shipping_method( $methods ) { $methods[] = 'NjengahPlus_Shipping_Method'; 返回$方法; } add_filter(“woocommerce_shipping_methods”,“add_njengahplus_shipping_method”); }
怎麼運行的
- 我們首先檢查是否定義了常量 WPINC。 如果未定義,則表示有人試圖直接或從某個位置(不是 WordPress)訪問此文件。
- 然後我們需要檢查 WooCommerce 是否處於活動狀態。 在這裡,我們正在檢查 woocommerce.php 是否在活動插件數組中,這些插件保存在數據庫中的選項 active_plugins 下。
- woocommerce_shipping_init 是 WooCommerce Shipping 的主要操作,其中包括實例化之前的所有運輸類。 使用此操作將確保在 WooCommerce 初始化後包含我們的運輸方式,並且在 WooCommerce 使用它的正確位置。
- __construct 方法設置了一些通用屬性,其中一些屬性在方法 init 從數據庫中加載後很容易被覆蓋。
- 其他方法留空,因為我們將在本教程後面定義它們。
然後,您需要使用以下步驟激活插件:
- 登錄您的 WordPress 站點並以管理員用戶身份訪問儀表板。
- 從儀表板菜單中,單擊插件並激活 Njengah shipping,如下所示:
- 激活插件後轉到WooCommerce > Settings 。 單擊 WooCommerce 選項卡,然後單擊NjengahPlus shipping 。 你應該能夠看到這個:
b) 設置國家可用性
我們創建的運輸方式僅在先前確定的國家列表中可用。
- 在方法 __construct 中添加:
<?php //... $this->method_description = __( 'NjengahPlus 的自定義運輸方式', 'njengahplus' ); // 可用性和國家 $this->availability = '包括'; $this->國家=數組( 'US', // 美利堅合眾國 'CA', // 加拿大 'DE', // 德國 'GB', // 英國 'IT', // 意大利 'ES', // 西班牙 'HR' // 肯尼亞 ); $this->init(); //...
代碼如何運作
可用性屬性設置為“包括”,因此此運輸僅適用於國家屬性中的國家/地區。
WooCommerce 將檢查發貨國家/地區是否包含在屬性國家/地區中。
創建設置
您只需複制此代碼並填充我們的方法 init_form_fields:
<?php 函數 init_form_fields() { $this->form_fields = 數組( '啟用' => 數組( 'title' => __('啟用', 'njengahplus' ), '類型' => '複選框', 'description' => __('啟用此運輸。', 'njengahplus' ), '默認' => '是' ), '標題' => 數組( '標題' => __( '標題', 'njengahplus' ), '類型' => '文本', 'description' => __( '要在網站上顯示的標題', 'njengahplus' ), '默認' => __( 'NjengahPlus Shipping', 'njengahplus' ) ), ); }
要檢查結果,請按照下列步驟操作:
- 登錄到您的 WordPress 網站並以管理員用戶身份訪問儀表板從儀表板菜單中,單擊WooCommerce > 設置
- 單擊Shipping選項卡,然後單擊 NjengahPlus Shipping,如下所示:
- 啟用複選框並保存更改。
我們可以將運輸方式設置為最大 100 公斤。 然後,如果該規則很快發生變化,我們將允許在設置中對其進行編輯。 設置後,設置代碼將如下所示:
<?php 函數 init_form_fields() { $this->form_fields = 數組( '啟用' => 數組( 'title' => __('啟用', 'njengahplus' ), '類型' => '複選框', 'description' => __('啟用此運輸。', 'njengahplus' ), '默認' => '是' ), '標題' => 數組( '標題' => __( '標題', 'njengahplus' ), '類型' => '文本', 'description' => __( '要在網站上顯示的標題', 'njengahplus' ), '默認' => __( 'NjengahPlus Shipping', 'njengahplus' ) ), '重量' => 數組( 'title' => __( '體重 (kg)', 'njengahplus' ), '類型' => '數字', 'description' => __('最大允許重量', 'njengahplus' ), '默認' => 100 ), ); }
在上面的代碼中,我們現在已經在設置下設置了最大權重。 這是結果:
c) 計算運費
為了計算運費,我們將一步一步更新方法calculate_shipping,以便您了解每一步。
- 首先,我們需要按重量計算成本。 為此,只需將此代碼添加到方法 calculate_shipping:
<?php //... 公共功能calculate_shipping($包){ $重量 = 0; $成本 = 0; $country = $package["destination"]["country"]; foreach ( $package['contents'] as $item_id => $values ) { $_product = $values['data']; $weight = $weight + $_product->get_weight() * $values['quantity']; } $weight = wc_get_weight($weight, 'kg' ); 如果($重量<= 10){ $成本 = 0; } elseif( $重量 <= 30 ) { $成本 = 5; } elseif( $重量 <= 50 ) { $成本 = 10; } 別的 { $成本 = 20; } }
- 從上面的代碼中,我們得到了基於購物車重量的成本,我們必須計算所選運輸國家的成本。 為此,請添加以下代碼:
<?php 公共功能calculate_shipping($包){ $countryZones = 數組( 'HR' => 0, '美國' => 3, 'GB' => 2, 'CA' => 3, 'ES' => 2, 'DE' => 1, '它' => 1 ); $zonePrices = 數組( 0 => 10, 1 => 30, 2 => 50, 3 => 70 ); $zoneFromCountry = $countryZones[ $country ]; $priceFromZone = $zonePrices[ $zoneFromCountry ]; $cost += $priceFromZone; }
- 我們已經按總重量計算了成本,我們還加上了運輸國家的成本。 最後一步是添加此代碼以註冊費率。
代碼如何運作
在本節的第一個片段中,我們定義了一些起始變量: $weight
、 $cost
和$country
。 為了獲得總數,我們通過迭代購物車並將購物車中每個產品的重量添加到變量$weight
來獲得總重量。
在得到總重量後,我們使用function wc_get_weight
將重量轉換為公斤,因為這是我們的運輸方法設置的限制單位。 然後最後一件事是將限制設置為100公斤。
在第二個片段中,數組$countryZones
保存每個國家/地區的區域,第二個數組$zonePrices
保存每個區域的價格。
這將是意大利 1 區的結果:
這將是西班牙 2 區的結果:
這將是加拿大區的結果:
如果你很難實現這段代碼,這裡是完整的代碼:
<?php 公共功能calculate_shipping($包){ $重量 = 0; $成本 = 0; $country = $package["destination"]["country"]; foreach ( $package['contents'] as $item_id => $values ) { $_product = $values['data']; $weight = $weight + $_product->get_weight() * $values['quantity']; } $weight = wc_get_weight($weight, 'kg' ); 如果($重量<= 10){ $成本 = 0; } elseif( $重量 <= 30 ) { $成本 = 5; } elseif( $重量 <= 50 ) { $成本 = 10; } 別的 { $成本 = 20; } $countryZones = 數組( 'HR' => 0, '美國' => 3, 'GB' => 2, 'CA' => 3, 'ES' => 2, 'DE' => 1, '它' => 1 ); $zonePrices = 數組( 0 => 10, 1 => 30, 2 => 50, 3 => 70 ); $zoneFromCountry = $countryZones[ $country ]; $priceFromZone = $zonePrices[ $zoneFromCountry ]; $cost += $priceFromZone; $率 = 數組( 'id' => $this->id, '標籤' => $this->title, '成本' => $成本 ); $this->add_rate($rate); }
結論
在這篇文章中,我們創建了一個自定義插件來在 WooCommerce 中添加自定義運輸方式。 此外,我與您分享了 WooCommerce Shipping API,它使您能夠通過簡單的步驟創建您的運輸方式。 此外,在計算運輸方式的可用性或成本時,可以在運輸方式中設置限制和可用性。 但是,可以使用 WooCommerce 操作在運輸方式之外設置它們。 我希望本教程提供了在 WooCommerce 中添加自定義運輸方式的解決方案。
類似文章
- 如何在 WooCommerce 中的產品上添加 GTIN 編號
- 如何刪除已添加到您的購物車消息 WooCommerce
- 如何在 WooCommerce 結帳頁面上添加信任或安全徽標
- WooCommerce 註銷而不確認:如何刪除“您確定要註銷嗎?”
- 如何在沒有插件的情況下重定向 WordPress 頁面?
- 如何添加產品圖片 WooCommerce 結帳頁面
- 如何在 WooCommerce 中設置特色產品
- 如何隱藏 WooCommerce 優惠券代碼字段
- 如何按類別顯示 WooCommerce 產品
- 如何在 WooCommerce 的商店頁面中隱藏所有產品
- 如何對 WooCommerce 類別進行排序以獲得更好的用戶體驗
- 如何使用 WooCommerce 銷售數字產品
- 如何更改 WooCommerce 的“已添加到購物車”通知
- 如何禁用特定類別的付款方式
- 為您的商店提供 30 多個最佳 WooCommerce 插件(大多數是免費的)
- 如何在 WooCommerce 中重命名訂單狀態消息
- 用於結帳頁面定制的 23 個最佳 WooCommerce 插件
- 如何刪除默認產品排序 WooCommerce
- 如何檢查插件在 WordPress 中是否處於活動狀態 [3 種方式]