Как получить стоимость и настройки способов доставки WooCommerce?

Я пытаюсь получить все способы доставки, с их тарифами и названием. Но когда я использую 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)

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

Огромное спасибо!


person Aske Merci    schedule 18.06.2020    source источник


Ответы (1)


Поскольку 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);
    }
}

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

person LoicTheAztec    schedule 19.06.2020
comment
Большое спасибо, сэр. Вы только что спасли мою неделю. Спасибо, что нашли время дать такой подробный и полезный ответ. Оставайтесь в безопасности! - person Aske Merci; 22.06.2020