2017-01-23 100 views
1

對於我的客戶網站與第三方的集成,我需要使用唯一名稱創建多種送貨方式(統一費率)。我遵循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'); 

}

回答

2

我已經想通了爲什麼閱讀這篇博客的評論

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'; 
+0

謝謝,這對我幫助很大! – Richard

+0

謝謝,我沒有這個問題,但你在問題中的原始代碼幫助我設置了區域的方法! – howdoyouturnthison

1

實際上它應該是

$methods['wa_metro_flat'] = 'WA_Metro_Shipping_Method'; 
相關問題