如果用户具有特定角色,我需要应用不同的税,但仅限于某些产品的类别。
示例:如果角色为“Vip”的客户A购买“Bravo”或“Charlie”类别的项目,则应用的税率为4%而不是22%
这是我在谷歌上写的另一部分的部分代码,但我不明白我错在哪里。
请有人可以帮助我吗?
function wc_diff_rate_for_user( $tax_class, $product ) {
global $woocommerce;
$lundi_in_cart = false;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
$terms = get_the_terms( $_product->id, 'product_cat' );
foreach ($terms as $term) {
$_categoryid = $term->term_id;
}
if (( $_categoryid === 81 ) || ( $_categoryid === 82 ) )) {
if ( is_user_logged_in() && current_user_can( 'VIP' ) ) {
$tax_class = 'Reduced Rate';
}
}
}
return $tax_class;
}
答案 0 :(得分:1)
根据购物车中的每行商品计算税金。您不必循环购物车商品。而是检查当前项目是否具有您要查找的类别。
尝试这样......
add_filter( 'woocommerce_product_tax_class', 'wc_diff_rate_for_user', 1, 2 );
function wc_diff_rate_for_user( $tax_class, $product ) {
// not logged in users are not VIP, let's move on...
if (!is_user_logged_in()) {return $tax_class;}
// this user is not VIP, let's move on...
if (!current_user_can( 'VIP' ) ) {return $tax_class;}
// it's already Reduced Rate, let's move on..
if ($tax_class == 'Reduced Rate') {return $tax_class;}
// let's get all the product category for this product...
$terms = get_the_terms( $product->id, 'product_cat' );
foreach ( $terms as $term ) { // checking each category
// if it's one of the category we'er looking for
if(in_array($term->term_id, array(81,82))) {
$tax_class = 'Reduced Rate';
// found it... no need to check other $term
break;
}
}
return $tax_class;
}