WooCommerce為我們提供了一個物流 API,可以讓我們添加快遞/物流方法,相對于WooCommerce支付網(wǎng)關API,這個API我們使用得不多,不過在一些特殊情況下,還是需要使用這個API 來加自定義物流/快遞方法,實現(xiàn)一些特殊快遞/物流方法的對接,比如我們下面要介紹的Ezship代取貨付款服務,添加并啟用 Ezship支付方法后,效果如下圖所示。

添加WooCommerce自定義物流方法的基礎代碼
前段時間我為臺灣一家提供代取貨送貨上門、代付款收款服務的Ezship網(wǎng)站開發(fā)了一款WooCommece插件,該插件集成了Ezship的支付網(wǎng)關,快遞方法到WooCommece,并且在后臺訂單列表集成了Ezship實時物流狀態(tài)。下面的示例代碼就是其中添加快遞/物流方式的主要代碼。
<?php
/**
* 判斷WooCommerce是否已經(jīng)激活
*/
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
add_action( 'woocommerce_shipping_init', 'your_shipping_method_init' );
/**
* 添加自定義物流方法
*/
function your_shipping_method_init() {
if ( ! class_exists( 'WC_Ezship_Shipping_Method' ) ) {
/**
* Ezship 快遞方法
*
* A simple shipping method for Ezship.
*
* @class WC_Shipping_Method
* @version 2.6.0
*/
class WC_Ezship_Shipping_Method extends WC_Shipping_Method {
/**
* WC_Ezship_Shipping_Method constructor.
*
* @param int $instance_id int 實例 ID
*/
public function __construct( $instance_id = 0 ) {
$this->id = 'ezship_shipping_method';
$this->instance_id = absint( $instance_id );
$this->method_title = 'Ezship 代取貨';
$this->method_description = 'Ezship 是臺灣的一家提供商店代取貨付款的快遞服務公司。';
$this->supports = [
'shipping-zones',
'instance-settings',
'instance-settings-modal',
];
$this->init();
$this->enabled = $this->get_option( 'enabled', 'yes' );
$this->title = $this->get_option( 'title', __( 'Ezship Shipping', 'woocommerce' ) );
}
/**
* 初始化物流方法
*/
public function init() {
// 加載設置
$this->init_form_fields();
$this->init_settings();
// 設置變量
$this->min_amount = $this->get_option( 'min_amount', 0 );
$this->requires = $this->get_option( 'requires' );
// Actions.
add_action( 'woocommerce_update_options_shipping_' . $this->id, [ $this, 'process_admin_options' ] );
}
//... 此處省略了一些方法
// 快遞方法是否可用
// 快遞費計算
}
}
}
}
上面的代碼只是添加了快遞方式,并沒有把快遞方式添加到可用的配送方式中,我們需要通過 woocommerce_shipping_methods Filter 鉤子,把上面添加的自定義快遞方式添加到可用的配送方式中,我們自定義的快遞方式才會出現(xiàn)在添加配送方式的下拉選項中。
/**
* 添加自己物流方法到WooCommerce物流方法中
*/
add_filter( 'woocommerce_shipping_methods', function ( $methods ) {
$methods[ 'ezship_shipping_method' ] = 'WC_Ezship_Shipping_Method';
return $methods;
} );

添加自定義物流方法設置
如果需要為自定義快遞方法添加一些設置,我么可以使用WooCommerce設置API 來添加一些自定義設置。比如下面的的代碼,我們添加了是否啟用物流方法的開關、物流方法的標題。在真實的插件中,還有是否啟用物流跟蹤的開關,最多代收多少費用的設置。
/**
* 初始化表單字段
*/
public function init_form_fields() {
$this->instance_form_fields = [
'enabled' => [
'title' => '啟用',
'type' => 'checkbox',
'default' => 'yes',
],
'title' => [
'title' => '快遞方法名稱',
'type' => 'text',
'default' => $this->method_title,
'desc_tip' => true,
],
];
}
篇幅所限,上面的代碼不是完整的添加WooCommerce快遞/物流方法的代碼,因為這個插件是為客戶定制開發(fā)的,也沒有開源插件代碼的權利。如果上面的參考代碼在使用過程中有什么不明白的,可以在留言中提出,我會盡量為大家說明。



不錯,試了很多代碼,就你這個可以。