我希望有人不能告诉我我忽略了什么。
情况:
我们有一些独特的业务逻辑,其中自定义用户元字段会影响适当的税类。我们有三个客户“;“类型”;(例如,这是用户元字段\'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\'
这正是我想要做的。
有没有一种方法我可以做到这一点,而不黑客核心?
非常感谢您的帮助。我完全不知所措,正赶时间。
最合适的回答,由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);