根据用户角色和产品类别应用不同的税(Woocommerce)

时间:2016-01-27 08:52:57

标签: php wordpress function woocommerce

如果用户具有特定角色,我需要应用不同的税,但仅限于某些产品的类别。

示例:如果角色为“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;
}

1 个答案:

答案 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;
}