對於我的客戶網站與第三方的集成,我需要使用唯一名稱創建多種送貨方式(統一費率)。我遵循woocommerce的原則創建了一個插件來添加一個運輸區域,然後找到一些說明來使它支持區域,並且它工作。我現在試圖讓插件創建多個發貨區域,但儘管它們似乎出現在區域中 - 單擊它們不會將它們添加到區域中。向woocommerce網站添加多種送貨方式(支持區域)
e.g. they appear here but don't do anything when clicked
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
function your_shipping_method_init() {
if (! class_exists('WA_Metro_Shipping_Method')) {
class WA_Metro_Shipping_Method extends WC_Shipping_Method {
/**
* Constructor for your shipping class
*
* @access public
* @return void
*/
public function __construct($instance_id = 0) {
$this->id = 'wa_metro_flat'; // Id for your shipping method. Should be uunique.
$this->method_title = __('WA Metro Flat Rate'); // Title shown in admin
$this->method_description = __('Flat rate shipping for WA Metro Postcodes'); // Description shown in admin
$this->enabled = "yes"; // This can be added as an setting but for this example its forced enabled
$this->title = "WA Metro Flat Rate"; // This can be added as an setting but for this example its forced.
$this->instance_id = absint($instance_id);
$this->supports = array(
'shipping-zones',
'instance-settings',
'instance-settings-modal',
);
$this->init();
}
/**
* Init your settings
*
* @access public
* @return void
*/
function init() {
// Load the settings API
$this->init_form_fields(); // This is part of the settings API. Override the method to add your own settings
$this->init_settings(); // This is part of the settings API. Loads settings you previously init.
// Save settings in admin if you have any defined
add_action('woocommerce_update_options_shipping_' . $this->id, array($this, 'process_admin_options'));
}
public function is_available($package){
return true;
}
/**
* calculate_shipping function.
*
* @access public
* @param mixed $package
* @return void
*/
public function calculate_shipping($package) {
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => '8.59',
'calc_tax' => 'per_item'
);
// Register the rate
$this->add_rate($rate);
}
}
}
/***************************************************/
if (! class_exists('WA_Regional_Shipping_Method')) {
class WA_Regional_Shipping_Method extends WC_Shipping_Method {
/**
* Constructor for your shipping class
*
* @access public
* @return void
*/
public function __construct($instance_id = 0) {
$this->id = 'vic_metro_flat'; // Id for your shipping method. Should be uunique.
$this->method_title = __('VIC Metro Flat Rate'); // Title shown in admin
$this->method_description = __('Flat rate shipping for VIC Metro Postcodes'); // Description shown in admin
$this->enabled = "yes"; // This can be added as an setting but for this example its forced enabled
$this->title = "VIC Metro Flat Rate"; // This can be added as an setting but for this example its forced.
$this->instance_id = absint($instance_id);
$this->supports = array(
'shipping-zones',
'instance-settings',
'instance-settings-modal',
);
$this->init();
}
/**
* Init your settings
*
* @access public
* @return void
*/
function init() {
// Load the settings API
$this->init_form_fields(); // This is part of the settings API. Override the method to add your own settings
$this->init_settings(); // This is part of the settings API. Loads settings you previously init.
// Save settings in admin if you have any defined
add_action('woocommerce_update_options_shipping_' . $this->id, array($this, 'process_admin_options'));
}
public function is_available($package){
return true;
}
/**
* calculate_shipping function.
*
* @access public
* @param mixed $package
* @return void
*/
public function calculate_shipping($package) {
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => '8.59',
'calc_tax' => 'per_item'
);
// Register the rate
$this->add_rate($rate);
}
}
}
/***************************************************/
if (! class_exists('VIC_Metro_Shipping_Method')) {
class VIC_Metro_Shipping_Method extends WC_Shipping_Method {
/**
* Constructor for your shipping class
*
* @access public
* @return void
*/
public function __construct($instance_id = 0) {
$this->id = 'wa_regional_flat'; // Id for your shipping method. Should be uunique.
$this->method_title = __('WA Regional Flat Rate'); // Title shown in admin
$this->method_description = __('Flat rate shipping for WA Metro Postcodes'); // Description shown in admin
$this->enabled = "yes"; // This can be added as an setting but for this example its forced enabled
$this->title = "WA Regional Flat Rate"; // This can be added as an setting but for this example its forced.
$this->instance_id = absint($instance_id);
$this->supports = array(
'shipping-zones',
'instance-settings',
'instance-settings-modal',
);
$this->init();
}
/**
* Init your settings
*
* @access public
* @return void
*/
function init() {
// Load the settings API
$this->init_form_fields(); // This is part of the settings API. Override the method to add your own settings
$this->init_settings(); // This is part of the settings API. Loads settings you previously init.
// Save settings in admin if you have any defined
add_action('woocommerce_update_options_shipping_' . $this->id, array($this, 'process_admin_options'));
}
/**
* calculate_shipping function.
*
* @access public
* @param mixed $package
* @return void
*/
public function calculate_shipping($package) {
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => '18.57',
'calc_tax' => 'per_item'
);
// Register the rate
$this->add_rate($rate);
}
}
}
/***************************************************/
}
add_action('woocommerce_shipping_init', 'your_shipping_method_init');
function add_your_shipping_method($methods) {
$methods['your_shipping_method'] = 'WA_Metro_Shipping_Method';
$methods['your_shipping_method_2'] = 'WA_Regional_Shipping_Method';
$methods['your_shipping_method_3'] = 'VIC_Metro_Shipping_Method';
return $methods;
}
add_filter('woocommerce_shipping_methods', 'add_your_shipping_method');
}
謝謝,這對我幫助很大! – Richard
謝謝,我沒有這個問題,但你在問題中的原始代碼幫助我設置了區域的方法! – howdoyouturnthison