Woocommerce添加多种送货方式

时间:2016-06-18 16:14:44

标签: wordpress woocommerce shipping

我使用下面的代码(由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 个答案:

答案 0 :(得分:0)

好的,我已成功通过重命名Class name添加另一个Shipping方法。以前我可能做错了什么

但是我想知道是否有更好的方法可以做到这一点,因为我复制粘贴了整整一段代码两次,我的背景不在OOP中但我认为这不是做这件事的正确方法

答案 1 :(得分:0)

我遇到了同样的问题,我的解决方案是一个新的类,它从WC_Shipping_Method扩展并保留所有相同的代码,我创建了3个新类扩展新的类,任何一个有自己的ID和方法型

它不是最好的解决方案,但它比重复N次相同的代码

更具有实用性