如何获取 WooCommerce 运输方式的成本和设置?

Posted

技术标签:

【中文标题】如何获取 WooCommerce 运输方式的成本和设置?【英文标题】:How to get WooCommerce shipping methods cost and settings? 【发布时间】:2020-10-08 04:25:18 【问题描述】:

我正在尝试获取所有运输方式,以及它们的费率和标题。但是当我使用WC()->shipping->get_shipping_methods() 时,它只会返回空的rates 数组和空的标题字符串。这是一个转储:

     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】:

因为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);
    

这一次,正如您将看到的,您将获得一个配送区域中设置的每个配送方式费率的所有设置(自定义标签、成本和其他设置)。

【讨论】:

非常感谢先生。你刚刚拯救了我的一周。感谢您抽出宝贵时间提供如此详细和有用的答案。保持安全!

以上是关于如何获取 WooCommerce 运输方式的成本和设置?的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce 运输方式仅适用于帐单地址

根据 WooCommerce 中的运输类别自定义计算的运输成本

在 Woocommerce Shipping 方法费率中设置最低项目成本

在 Woocommerce 中发送特定运输方式的订单保留电子邮件

WooCommerce:根据运输方式自动完成已付款订单

Woocommerce 在前端列出并显示 WooCommerce 运输区域