我只想导出税率降低的项目的总计。
例如,我有 2 件降低税率的商品和一件正常税率的商品:
我现在想要项目 A 和 B 的总计。在本例中,总价值为 157,50 欧元。
我找到了一个代码片段来获取类别的总税额:
// 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>';
但是该代码为我提供了所有税种。有什么办法可以只得到一个吗?
这就是我现在正在做的事情(摘录):
$custom_order_total_tax = $custom_order_data['total_tax'];
$custom_order_total = $custom_order_data['total'];
$custom_order_subtotal = $order->get_subtotal();
$order
变量中没有任何我可以使用的东西。
我想我需要检查订单中的所有项目。但我该如何根据税率来选择这些商品呢?
我在这里发现了一些东西:
// 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();
}
但税率不属于其中。所以我想我需要第二个数组?
然后您可以创建一个自定义函数,
根据指定的税级计算订单商品的总计。
该函数有两个参数:
$order_id
:您要获取总计的订单ID
$tax_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;
}
使用
如果您想根据60
税级获取订单 id
reduced-rate
的订单商品的总和,您可以按照以下步骤操作:
$total = get_total_order_items_by_tax_class( 60 );
如果您想根据standard
$total = get_total_order_items_by_tax_class( 60, '' );
因为standard
税类段是空的。
代码已经过测试并且可以工作。