我使用下面的代码(由woocommerce API提供)添加自定义航运方法,它是工作,但现在我想添加另一个航运方法,我尝试复制粘贴相同的代码与不同的类名,但它实际上不工作,第二个方法是取代第一个
我想知道如何创建另一种送货方式?谢谢
function your_shipping_method_init() {
if ( ! class_exists( 'WC_Your_Shipping_Method' ) ) {
class WC_Your_Shipping_Method extends WC_Shipping_Method {
/**
* Constructor for your shipping class
*
* @access public
* @return void
*/
public function __construct() {
$this->id = 'vip_rate'; // Id for your shipping method. Should be uunique.
$this->method_title = __( 'VIP Shipping Rate' ); // Title shown in admin
$this->method_description = __( '$35 flate rate' ); // Description shown in admin
$this->enabled = "yes"; // This can be added as an setting but for this example its forced enabled
$this->title = "VIP Shipping rate"; // This can be added as an setting but for this example its forced.
$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 ) {
$cost=35;
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => round($cost,2),
'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[] = 'WC_Your_Shipping_Method';
return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'add_your_shipping_method' );
2条答案
按热度按时间ozxc1zmp1#
我也遇到了同样的问题,我的解决方案是创建一个新类,从WC_Shipping_Method扩展而来,并在那里保留所有相同的代码,我创建了3个新类,扩展新类,任何一个都有自己的ID和方法类型
这不是最好的解决方案,但它比重复N次类的相同代码更有效
jw5wzhpr2#
好的,我已经通过重命名类名成功地添加了另一个运送方法。以前我可能做错了什么
然而,我想知道是否有一些更好的方法来做这件事,因为我已经复制粘贴整个代码块两次,我的背景是不是在OOP然而,我认为这不是正确的方式来做这件事