向woocommerce网站添加多种送货方式(支持区域)
问题描述:
对于我的客户网站与第三方的集成,我需要使用唯一名称创建多种送货方式(统一费率)。我遵循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');
}
答
我已经想通了为什么阅读这篇博客的评论
https://wpruby.com/shipping-method-for-woocommerce-development-tutorial/
后基本上不工作我在那里设置该方法的ID为
$this->id = 'wa_metro_flat';
我是不是该位使用,我用的是函数名
$methods['your_shipping_method'] = 'WA_Metro_Shipping_Method';
正确的方法名称应该是
$methods['your_shipping_method'] = 'wa_metro_flat';
答
实际上它应该是
$methods['wa_metro_flat'] = 'WA_Metro_Shipping_Method';
谢谢,这对我帮助很大! – Richard
谢谢,我没有这个问题,但你在问题中的原始代码帮助我设置了区域的方法! – howdoyouturnthison