2017-07-18 121 views
6

我已經成功創建了新的送貨方式,併爲送貨區域提供了支持。但是,當我從下拉列表中選擇方法將其添加到區域時,它不會出現在「選擇的方法列表」中。如何在WooCommerce中添加自定義的送貨方式3

我錄一個screencast gif證明:

screencast gif

我不能爲我的生命弄清楚爲什麼它不工作。如果我選擇其中一種標準方法(Screencast GIF

任何人都知道這裏發生了什麼以及如何使其工作?

下面的代碼,我有from this official thread: Shipping Method API

if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) { 

    function request_a_shipping_quote_init() { 
     if (! class_exists('WC_Request_Shipping_Quote_Method')) { 
      class WC_Request_Shipping_Quote_Method extends WC_Shipping_Method { 
       /** 
       * Constructor for your shipping class 
       * 
       * @access public 
       * @return void 
       */ 
       public function __construct() { 
        $this->id     = 'request_a_shipping_quote'; // Id for your shipping method. Should be uunique. 
        $this->method_title  = __('Request a Shipping Quote'); // Title shown in admin 
        $this->method_description = __('Shipping method to be used where the exact shipping amount needs to be quoted'); // Description shown in admin 

        $this->title = "Request a Shipping Quote"; // This can be added as an setting but for this example its forced. 

        $this->supports = array(
         'shipping-zones' 
        ); 

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

       function init_form_fields() { 

        $this->form_fields = array(

         'enabled' => array(
          'title'  => __('Enable', 'dc_raq'), 
          'type'  => 'checkbox', 
          'description' => __('Enable this shipping method.', 'dc_raq'), 
          'default'  => 'yes' 
         ), 

         'title' => array(
          'title'  => __('Title', 'dc_raq'), 
          'type'  => 'text', 
          'description' => __('Title to be displayed on site', 'dc_raq'), 
          'default'  => __('Request a Quote', 'dc_raq') 
         ), 

        ); 

       } 

       /** 
       * calculate_shipping function. 
       * 
       * @access public 
       * 
       * @param mixed $package 
       * 
       * @return void 
       */ 

       public function calculate_shipping($packages = array()) { 
        $rate = array(
         'id'  => $this->id, 
         'label' => $this->title, 
         'cost'  => '0.00', 
         'calc_tax' => 'per_item' 
        ); 

        // Register the rate 
        $this->add_rate($rate); 
       } 
      } 
     } 
    } 

    add_action('woocommerce_shipping_init', 'request_a_shipping_quote_init'); 

    function request_shipping_quote_shipping_method($methods) { 
     $methods['request_shipping_quote_shipping_method'] = 'WC_Request_Shipping_Quote_Method'; 

     return $methods; 
    } 

    add_filter('woocommerce_shipping_methods', 'request_shipping_quote_shipping_method'); 
} 
+0

這不是在woocommerce 3+工作了,看到這個未回答支持線程:HTTPS: //wordpress.org/support/topic/official-custom-shipping-class-doesnt-work-anymore-shipping-method-api/ – LoicTheAztec

+0

**與WC_Shipping_Method'calculate_shipping()'核心方法**有衝突,並且在您的代碼插件中定義的那個...這是需要解決的問題編輯。因爲**拋出了這個錯誤**:*嚴格標準:WC_Request_Shipping_Quote_Method :: calculate_shipping()聲明應該與/www/wp-content/plugins/request_shipping_quote_method.php中的WC_Shipping_Method :: calculate_shipping($ package = Array)兼容。 line 18 * – LoicTheAztec

+0

@LoicTheAztec有沒有這方面的成功? – omukiguy

回答

2

「woocommerce_shipping_methods」上的方法鍵應該與Ë運輸方式ID

你的情況: 你應該改變

function request_shipping_quote_shipping_method($methods) { 
    $methods['request_shipping_quote_shipping_method'] = 'WC_Request_Shipping_Quote_Method'; 

    return $methods; 
} 

add_filter('woocommerce_shipping_methods', 'request_shipping_quote_shipping_method'); 

要:

function request_shipping_quote_shipping_method($methods) { 
    $methods['request_a_shipping_quote'] = 'WC_Request_Shipping_Quote_Method'; 

    return $methods; 
} 

add_filter('woocommerce_shipping_methods', 'request_shipping_quote_shipping_method'); 
+0

只是發現了這個回覆 - 修正了它!非常感謝,非常感謝您的回覆 – jhob101

3

改變這一行

public function calculate_shipping($package) { 

這一行

公共職能calculate_shipping($包=陣列()){

+0

謝謝你。我確實實現了該代碼,但它仍然無法工作。該網站目前是遠程的,所以我不能看到拋出什麼錯誤,將它在本地工作,看看我是否可以看到任何錯誤。 – jhob101

+0

因此,當我添加'$ package = array()'時,現在沒有錯誤被拋出,但行爲保持不變 - 運送方法未被添加到運輸方法列表中。 – jhob101

+0

你正在得到什麼錯誤? bcoz現在你必須檢查你是如何處理你的函數中的包,現在bcoz是包的數組 – Alice

相關問題