【问题标题】:Get tax rates for product on manual order creation in WooCommerce admin在 WooCommerce 管理员中获取手动订单创建产品的税率
【发布时间】:2021-01-28 11:56:38
【问题描述】:

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

基于Get tax rate used in an order for one product and for shipping in 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 数组,这是我的问题。有什么建议吗?

【问题讨论】:

    标签: php wordpress woocommerce rate tax


    【解决方案1】:

    终于找到了解决办法:

    在这个sn-p之后

    $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'] 数组包含一个空值。

    我希望一切都清楚

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-10
      • 2018-04-01
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 2020-01-11
      • 2021-06-01
      • 1970-01-01
      相关资源
      最近更新 更多