WooCommerce:仅从税率较低的商品中获取订单总计
WooCommerce: Get order totals only from items with reduced tax rate
我只想导出低税率项目的总计。
例如,我有2件商品是减税的,1件是正常税率的:
- 项目 A:100 欧元 - 5,00 欧元减税 - 总计 105,00 欧元
- 项目 B:50 欧元 - 2,50 欧元减税 - 总计 52,50 欧元
- 项目 C:100 欧元 - 19,00 欧元正常税 - 119,00 欧元总计
我现在想要项目 A 和 B 的总计。在这种情况下,总价值为 157,50 欧元。
我找到了一个 code snippet 来获取总税额 class:
// Get the WC_Order instance Object from the Order ID (if needed)
$order = wc_get_order($order_id);
// Output the tax rows in a table
echo '<table>';
foreach ( $order->get_tax_totals() as $rate_code => $tax ) {
$tax_rate_id = $tax->rate_id;
$tax_label = $tax->label;
$tax_amount = $tax->amount;
$tax_f_amount = $tax->formatted_amount;
$compound = $tax->is_compound;
echo '<tr><td>' . $tax_label . ': </td><td>' . $tax_f_amount . '</td></tr>';
}
echo '</table>';
但是那个代码给了我所有的税 classes。有什么办法只得到一个吗?
这是我现在正在做的事情(摘录):
$custom_order_total_tax = $custom_order_data['total_tax'];
$custom_order_total = $custom_order_data['total'];
$custom_order_subtotal = $order->get_subtotal();
$order
变量中没有我可以使用的东西。
我想我需要检查订单的所有项目。但是我怎么能select这些项目按税率?
我发现了一些东西here:
// Get and Loop Over Order Items
foreach ( $order->get_items() as $item_id => $item ) {
$product_id = $item->get_product_id();
$variation_id = $item->get_variation_id();
$product = $item->get_product();
$name = $item->get_name();
$quantity = $item->get_quantity();
$subtotal = $item->get_subtotal();
$total = $item->get_total();
$tax = $item->get_subtotal_tax();
$taxclass = $item->get_tax_class();
$taxstat = $item->get_tax_status();
$allmeta = $item->get_meta_data();
$somemeta = $item->get_meta( '_whatever', true );
$type = $item->get_type();
}
但是税率不是其中的一部分。所以我想我需要第二个数组?
要获取订单商品的税金 class,请看这里:
然后您可以创建一个自定义函数,根据指定的税 class.
对订单商品的总计求和
函数有两个参数:
$order_id
:要获取合计的订单id
$tax_class
:用作过滤器的税 class (默认情况下设置“减税”)
所以:
// gets the total of the order items by tax class
function get_total_order_items_by_tax_class( $order_id, $tax_class = 'reduced-rate' ) {
$order = wc_get_order( $order_id );
// initializes the total of the order items
$total = 0;
foreach( $order->get_items() as $item_id => $order_item ) {
// if the product tax class is equal to "$tax_class"
if ( $tax_class == $order_item['tax_class'] ) {
// sum the total
$total += $order_item['total'];
}
}
return $total;
}
用法
如果想得到order id60
的订单商品的总和,根据reduced-rate
税 class 您可以按如下方式进行:
$total = get_total_order_items_by_tax_class( 60 );
如果您想根据 standard
税 class 筛选产品,您可以使用:
$total = get_total_order_items_by_tax_class( 60, '' );
因为 standard
税 class slug 是空的。
代码已经过测试并且有效。
我只想导出低税率项目的总计。
例如,我有2件商品是减税的,1件是正常税率的:
- 项目 A:100 欧元 - 5,00 欧元减税 - 总计 105,00 欧元
- 项目 B:50 欧元 - 2,50 欧元减税 - 总计 52,50 欧元
- 项目 C:100 欧元 - 19,00 欧元正常税 - 119,00 欧元总计
我现在想要项目 A 和 B 的总计。在这种情况下,总价值为 157,50 欧元。
我找到了一个 code snippet 来获取总税额 class:
// Get the WC_Order instance Object from the Order ID (if needed)
$order = wc_get_order($order_id);
// Output the tax rows in a table
echo '<table>';
foreach ( $order->get_tax_totals() as $rate_code => $tax ) {
$tax_rate_id = $tax->rate_id;
$tax_label = $tax->label;
$tax_amount = $tax->amount;
$tax_f_amount = $tax->formatted_amount;
$compound = $tax->is_compound;
echo '<tr><td>' . $tax_label . ': </td><td>' . $tax_f_amount . '</td></tr>';
}
echo '</table>';
但是那个代码给了我所有的税 classes。有什么办法只得到一个吗?
这是我现在正在做的事情(摘录):
$custom_order_total_tax = $custom_order_data['total_tax'];
$custom_order_total = $custom_order_data['total'];
$custom_order_subtotal = $order->get_subtotal();
$order
变量中没有我可以使用的东西。
我想我需要检查订单的所有项目。但是我怎么能select这些项目按税率?
我发现了一些东西here:
// Get and Loop Over Order Items
foreach ( $order->get_items() as $item_id => $item ) {
$product_id = $item->get_product_id();
$variation_id = $item->get_variation_id();
$product = $item->get_product();
$name = $item->get_name();
$quantity = $item->get_quantity();
$subtotal = $item->get_subtotal();
$total = $item->get_total();
$tax = $item->get_subtotal_tax();
$taxclass = $item->get_tax_class();
$taxstat = $item->get_tax_status();
$allmeta = $item->get_meta_data();
$somemeta = $item->get_meta( '_whatever', true );
$type = $item->get_type();
}
但是税率不是其中的一部分。所以我想我需要第二个数组?
要获取订单商品的税金 class,请看这里:
然后您可以创建一个自定义函数,根据指定的税 class.
对订单商品的总计求和函数有两个参数:
$order_id
:要获取合计的订单id$tax_class
:用作过滤器的税 class (默认情况下设置“减税”)
所以:
// gets the total of the order items by tax class
function get_total_order_items_by_tax_class( $order_id, $tax_class = 'reduced-rate' ) {
$order = wc_get_order( $order_id );
// initializes the total of the order items
$total = 0;
foreach( $order->get_items() as $item_id => $order_item ) {
// if the product tax class is equal to "$tax_class"
if ( $tax_class == $order_item['tax_class'] ) {
// sum the total
$total += $order_item['total'];
}
}
return $total;
}
用法
如果想得到order id60
的订单商品的总和,根据reduced-rate
税 class 您可以按如下方式进行:
$total = get_total_order_items_by_tax_class( 60 );
如果您想根据 standard
税 class 筛选产品,您可以使用:
$total = get_total_order_items_by_tax_class( 60, '' );
因为 standard
税 class slug 是空的。
代码已经过测试并且有效。