WooCommerce在重新计算现有订单时以编程方式更改税级

时间:2021-06-09 作者:user19918

我希望有人不能告诉我我忽略了什么。

情况:

我们有一些独特的业务逻辑,其中自定义用户元字段会影响适当的税类。我们有三个客户“;“类型”;(例如,这是用户元字段\'type_one\', \'type_two\', \'type_three\') 有三个相应的海关税类别(\'class_one\', \'class_two\', \'class_three\').

当我们计算购物车上的税时,我们在woocommerce\\u product\\u get\\u tax\\u类上运行一个过滤器,并根据查找此用户元重新分配税类。它非常适合我们的需要。有点像这样(但当然不完全是这样):

function reassign_tax_class( $tax_class, $product ) {
    $user = wp_get_current_user();
    if(get_user_meta( $user->ID, \'_our_custom_field\', true)==\'type_one\'){
        $tax_class = \'class_one\';
    }
    return $tax_class;
}
add_filter( \'woocommerce_product_get_tax_class\', \'reassign_tax_class\', 1, 2 );
问题:

我们经常需要在WP Admin中使用“编辑订单”页面上的“重新计算”按钮。我找不到可以在何处筛选或挂钩订单项目上的税务类别分配。它似乎位于wc order item类中的calculate\\u taxes()方法中。php类(第220行:https://github.com/woocommerce/woocommerce/blob/trunk/includes/class-wc-order-item.php#L220 )--如果插入第221行$calculate_tax_for[\'tax_class\'] = \'class_one\' 这正是我想要做的。

有没有一种方法我可以做到这一点,而不黑客核心?

非常感谢您的帮助。我完全不知所措,正赶时间。

1 个回复
最合适的回答,由SO网友:user19918 整理而成

发布对我有用的解决方案,以防将来对任何人都有帮助(归功于Rup &;WooCommerce Community Slack)

我在cart端过滤税务类getter,这正是我所需要的,所以我专注于找出如何在订单端过滤税务类getter。Community Slack上的Devinsays推荐了显而易见的事后过滤解决方案,也就是cart端的setter,然后订单端在没有任何过滤器的情况下工作。换句话说,当我为购物车端的计算重新分配税务类别时,请主动将其设置为订单创建。然后将其附加到订单项,以便稍后重新计算。类似这样:

function also_reassign_the_setter($item, $cart_item_key, $values, $order){
    //some custom logic
    $item->set_tax_class(\'class_one\');
}
add_action(\'woocommerce_checkout_create_order_line_item\', \'also_reassign_the_setter\', 20, 4);

相关推荐

WP_Query filters

这个问题可能看起来很愚蠢,但我真的没有找到有用的链接。我正在尝试做一个简单的查询,在这里我选择了最近的10篇文章,我希望能够在循环中只显示这10篇文章中的1篇我的代码看起来像 // Query latest 10 records $the_query = new WP_Query( array( \'post_type\' => \'post\', \"order\" => \"DESC\", \'posts_per_page