在 WooCommerce 管理员中获取手动创建订单的产品税率

Get tax rates for product on manual order creation in WooCommerce admin

我正在尝试从 WooCommerce 订单中的订单项目中获取所有产品税率。

基于答案代码,我为订单项构建了一个循环:

foreach ($order->get_items() as $item_key => $item_value) {
    $item_data = $item_value->get_data();

    $product_id = $item_value['product_id'];
    $product = wc_get_product($product_id);
    $wc_product = $item_value->get_product(); // prodotto in WooCommerce
    $sku = '';
    if(!empty($wc_product))
        $sku = $wc_product->get_sku();
    $product_type = $item_value->get_type();

    if ($item_data['variation_id'] !== 0) {
        $variation = $item_data['variation_id'];
        $var_data = new \WC_Product_Variation($variation);
        $var_attr = implode(', ', $var_data->get_variation_attributes());
    }

    $tax_rates = \WC_Tax::get_rates($item_data['tax_class']);
    if (!empty($tax_rates)) {
        $tax_rate = reset($tax_rates);
    } 
    
    $rateId = key($tax_rates);
    $rate = \WC_Tax::get_rate_percent_value($rateId);   
    $rateDescription = \WC_Tax::get_rate_label($rateId);
    
    
    /* in questo array ho tutti i dati che mi servono,
    *  sotto la chiave data raggruppo item_data
    */ 
    $order_items_data[] = array(
      'product_id' => $product_id,
      'sku' => $sku,
      'product_type' => $product_type,
      'variation_attr' => $var_attr,
      'price' => $fixnum($item_data['subtotal'] / $item_data['quantity'], 6),
      'discount' => $item_data['subtotal'] - $item_data['total'],
      'tax_rate' => $rate,
      'tax_description' => $rateDescription,
      'tax_id' => $rateId,
      'data' => $item_data
   );
}

当在网站前端添加订单时,此代码可以正常工作。 当我通过管理员添加新订单时,我得到一个空的 $tax_rates 数组,这是我的问题。有什么建议吗?

终于找到解决办法了:

在此片段之后

$tax_rates = \WC_Tax::get_rates($item_data['tax_class']);
    if (!empty($tax_rates)) {
        $tax_rate = reset($tax_rates);
    } 
    
    $rateId = key($tax_rates);
    $rate = \WC_Tax::get_rate_percent_value($rateId);   
    $rateDescription = \WC_Tax::get_rate_label($rateId);

我添加了这些行:

if (empty($rateId)) {
    $usedRate = array_filter($item_data['taxes']['total']);
    $rateId = key($usedRate);
    $rate = \WC_Tax::get_rate_percent_value($rateId);
    $rateDescription = \WC_Tax::get_rate_label($rateId);
}

这是因为如果产品使用另一个税号,$item_data['taxes']['total'] 数组包含一个空值。

我希望一切都清楚