WooCommerce:仅从税率较低的商品中获取订单总计

WooCommerce: Get order totals only from items with reduced tax rate

我只想导出低税率项目的总计。

例如,我有2件商品是减税的,1件是正常税率的:

我现在想要项目 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 是空的。

代码已经过测试并且有效。