在 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']
数组包含一个空值。
我希望一切都清楚
我正在尝试从 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']
数组包含一个空值。
我希望一切都清楚