Как узнать стоимость и настройки способов доставки WooCommerce? - PullRequest
2 голосов
/ 18 июня 2020

Я пытаюсь получить все способы доставки с указанием их тарифов и названия. Но когда я использую WC()->shipping->get_shipping_methods(), он будет возвращать только пустой массив ставок и пустую строку заголовка. Вот дамп:

     array (size=3)
  'flat_rate' => 
    object(WC_Shipping_Flat_Rate)[1861]
      protected 'fee_cost' => string '' (length=0)
      public 'supports' => 
        array (size=3)
          0 => string 'shipping-zones' (length=14)
          1 => string 'instance-settings' (length=17)
          2 => string 'instance-settings-modal' (length=23)
      public 'id' => string 'flat_rate' (length=9)
      public 'method_title' => string 'Flat rate' (length=9)
      public 'method_description' => string 'Lets you charge a fixed rate for shipping.' (length=42)
      public 'enabled' => string 'yes' (length=3)
      public 'title' => string '' (length=0)
      public 'rates' => 
        array (size=0)
          empty
      public 'tax_status' => string '' (length=0)
      public 'fee' => null
      public 'minimum_fee' => null
      public 'instance_id' => int 0
      public 'instance_form_fields' => 
        array (size=3)
          'title' => 
            array (size=5)
              ...
          'tax_status' => 
            array (size=5)
              ...
          'cost' => 
            array (size=7)
              ...
      public 'instance_settings' => 
        array (size=0)
          empty
      public 'availability' => null
      public 'countries' => 
        array (size=0)
          empty
      public 'plugin_id' => string 'woocommerce_' (length=12)
      public 'errors' => 
        array (size=0)
          empty
      public 'settings' => 
        array (size=4)
          'title' => string '' (length=0)
          'tax_status' => string '' (length=0)
          'cost' => string '' (length=0)
          'type' => string 'class' (length=5)
      public 'form_fields' => 
        array (size=0)
          empty
      protected 'data' => 
        array (size=0)
          empty
      public 'cost' => string '' (length=0)
      public 'type' => string 'class' (length=5)

Пробовал погуглить, но ничего особо не помогло. Кто-нибудь знает, в чем может быть проблема?

Большое спасибо!

1 Ответ

2 голосов
/ 19 июня 2020

Поскольку WC()->shipping->get_shipping_methods() не загружает методы доставки, установленные для каждой зоны доставки, просто загружает все доступные способы доставки, которые вы можете установить в любой зоне доставки , со всеми значениями по умолчанию и доступными поля для настроек…

Помните, что стоимость методов доставки и настройки задаются зоной доставки и связаны с местоположениями (регион, страна, штат или почтовый индекс).

Так как тарифы на методы доставки различаются для каждой зоны доставки, вам нужно сначала получить одну или все зоны доставки, которые указаны в настройках раздела доставки.

Затем из зоны доставки вы можете получить все тарифы способов доставки, которые установлены для него, например:

// Get all your existing shipping zones IDS
$zone_ids = array_keys( array('') + WC_Shipping_Zones::get_zones() );

// Loop through shipping Zones IDs
foreach ( $zone_ids as $zone_id ) 
{
    // Get the shipping Zone object
    $shipping_zone = new WC_Shipping_Zone($zone_id);

    // Get all shipping method values for the shipping zone
    $shipping_methods = $shipping_zone->get_shipping_methods( true, 'values' );

    // Loop through each shipping methods set for the current shipping zone
    foreach ( $shipping_methods as $instance_id => $shipping_method ) 
    {
        // The dump of protected data from the current shipping method
        var_dump($shipping_method);
    }
}

На этот раз, как вы увидите, вы получите все настройки (пользовательская этикетка, стоимость и другие настройки) для каждого тарифа метода доставки, установленного в зоне доставки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...