2016-06-18 3 views
0

Я использовал приведенный ниже код (как это предусмотрено API-интерфейсом woocommerce), чтобы добавить пользовательский метод доставки, и он работает, но теперь я хочу добавить другой метод доставки. Я попробовал копировать, вставляя один и тот же код с другим именем класса, но он не работает на самом деле второй метод заменяет первыйWoocommerce Добавление нескольких методов доставки

Я хочу знать, как создать другой способ доставки? Спасибо

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'); 

ответ

0

ОК мне удалось добавить еще один способ доставки путем переименования класса name.Previously я могу делать что-то неправильно

Однако я хотел бы знать, существует ли какой-то лучший способ сделать это потому что у меня есть копия, вставленная целая часть кода дважды. Мой фон не в ООП, но я думаю, что это не правильный способ сделать это.

0

У меня такая же проблема, мое решение было сделано новым классом, который простирается от WC_Shipping_Method и хранит там все тот же код, и я сделал 3 новых класса, расширяющих новый , любой из них со своим ID и mothod типа

Это не лучшее решение, но более долговечное, чем дублирующее N раз в том же кодекса класса

Смежные вопросы