WooCommerce:使用税收行获取订单导出

WooCommerce: Get order export with tax lines

我想导出所有税行按税率分隔的订单。

例如:订单的税率可能为 7% 和 19%。如果订单中有两种税率的产品,我只会得到一个合并税额。

假设订单有两个产品,每个 100 欧元。会有以下税费:

我正在使用以下代码(摘录)导出订单数据:

$order_data = $order->get_data(); // The Order data 
$order_date_created = $order_data['date_created']->date('d.m.Y'); // Example for oder creation date

获取到数据后,我需要将它们存储在一个数组中:

$custom_data = array(
    'custom_order_date_created'     => $custom_order_date_created,
)

我需要的是每个税率的固定列(如上面的$order_date_created)。

喜欢:

如果没有税率金额,则该列可能为空。

我知道有一个订单属性叫tax_lines。但它是一个数组,我不知道如何使用它。 属性 tax_lines 有一些自己的 tax lines properties.

有人知道如何从订单中获取这些值吗?

编辑: 我在 中找到了一个片段:

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>';
        }

它看起来不错,但我不确定如何在我的代码示例中使用它并将它存储在我的数组中。

编辑 2: 经过更多挖掘,我发现 WC_Order_Item_Tax object 其中包含订单税项。 所以我尝试使用该数据,但它是一个巨大的对象,我不确定如何 select 数据并将其显示在右栏中。

看起来像这样(还有很多)。我需要 select 按 rate_id 征税 例如:

[4543] => WC_Order_Item_Tax Object
        (
            [extra_data:protected] => Array
                (
                    [rate_code] => 
                    [rate_id] => 0
                    [label] => 
                    [compound] => 
                    [tax_total] => 0
                    [shipping_tax_total] => 0
                    [rate_percent] => 
                )

            [data:protected] => Array
                (
                    [order_id] => 11244
                    [name] => 
                    [rate_code] => DE-MWST.-1
                    [rate_id] => 1
                    [label] => MwSt.
                    [compound] => 1
                    [tax_total] => 7.54
                    [shipping_tax_total] => 0
                    [rate_percent] => 16
                )

            [cache_group:protected] => order-items
            [meta_type:protected] => order_item
            [object_type:protected] => order_item
            [id:protected] => 4543
            [changes:protected] => Array
                (
                )

            [object_read:protected] => 1
            [default_data:protected] => Array
                (
                    [order_id] => 0
                    [name] => 
                    [rate_code] => 
                    [rate_id] => 0
                    [label] => 
                    [compound] => 
                    [tax_total] => 0
                    [shipping_tax_total] => 0
                    [rate_percent] => 
                )

你可以这样使用它,可能在这行代码之后

$custom_data = array(
    'custom_order_date_created'     => $custom_order_date_created,
)

然后 foreach 循环与税率项目和使用 WC_Tax method get_rate_percent() 得到税率百分比如下:

// Loop through order tax items
foreach ( $order->get_tax_totals() as $rate_code => $tax ) {

    // Store it in the array
    $custom_data['taxes'][] = array(
        'tax_rate'   =>  WC_Tax::get_rate_percent($tax->rate_id), // <=== the tax rate percentage
        'tax_amount' => $tax->formatted_amount
    );
}

相关:

  • How to get order tax details and rates in WooCommerce?