在woocommerce中添加购物车时更改可变产品价格

I have created custom meta fields to add custom price according to user roles for both simple product and variable type product.

    add_filter('woocommerce_get_price','change_price', 10, 2);
    add_filter('woocommerce_get_regular_price','change_price', 10, 2);
    add_filter('woocommerce_get_sale_price','change_price', 10, 2);


    function change_price($price, $productd){

        get_currentuserinfo;
        global $current_user;
        $category = $current_user->roles[0];

  if($productd->product_type == 'simple')
    {

        if($category == 'gastronomy' || $category == 'corporate' ||     $category == 'retail' || $category == 'distributor') {
        $price = get_post_meta( $productd->id, $category.'_price',true);
      }
       return $price;
    }

}

I use above code to change price in front end according to user roles for simple type products and it works correctly . its show change price and also when I click on add to cart button its add changed price in cart.

In case of variable product I use below code

   add_filter( 'woocommerce_variation_sale_price_html', 'my_html', 10, 2);
  add_filter( 'woocommerce_variation_price_html', 'my_html', 10, 2);
  add_filter( 'woocommerce_get_variation_price_html', 'my_html', 10, 2);
   function my_html( $price, $variation ) {

        get_currentuserinfo;
        global $current_user;
         $category = $current_user->roles[0];

  if (  $variation->product_type == 'variation'  ) {

    if($category == 'gastronomy' || $category == 'corporate' || $category == 'retail' || $category == 'distributor') {
        $price = get_post_meta( $variation->variation_id, $category.'_price',true);
        return woocommerce_price($price);
       }

       else
       {
            return woocommerce_price(get_post_meta( $variation->variation_id, '_regular_price',true));
    }
}

}

from this variation price changed according to user roles but the problem is that when I clicked on add to cart button its add 0.00 price in cart for all variable product

so please if u have any idea then solve this.

Thanks & Regards Suresh Kumar

Try with this hooks-

add_filter('woocommerce_variable_sale_price_html', 'my_html' , 10, 2);
add_filter('woocommerce_variable_price_html',  'my_html' , 10, 2);

Thanks for your support I used below code and ot solved my problems.

add_filter('woocommerce_get_price','change_price', 10, 2);

function change_price($price, $productd){

        get_currentuserinfo();
        global $current_user;
        $category = $current_user->roles[0];

if($productd->product_type == 'simple')
{
    if($category == 'gastronomy' || $category == 'corporate' || $category == 'retail' || $category == 'distributor') {
            $custome_price = get_post_meta( $productd->id, $category.'_price',true);
            return $custome_price;
    }
    else 
    {
        return $price;
    }
}
 if (  $productd->product_type == 'variation' || $productd->product_type == 'variable' ) {

   if($category == 'gastronomy' || $category == 'corporate' || $category == 'retail' || $category == 'distributor') {
        $custom_price = get_post_meta( $productd->variation_id, $category.'_price',true);
        return $custom_price;
    }

    else
    {
            return get_post_meta( $productd->variation_id, '_regular_price',true);
    }
}

}

function m_varient_price( $price, $variation ) {
if (  $variation->product_type == 'variation'  ) {
$user = $user ? new WP_User( $user ) : wp_get_current_user();
$role = $user->roles[0];
if($role == 'distributor'){$pricex = get_post_meta( $variation->variation_id, '_dist_field',true);}
else if($role == 'reseller'){$price = get_post_meta( $variation->variation_id, '_rese_field',true);}  
else{ $pricex = $price;}
}
return $pricex;
}

add_filter( 'woocommerce_product_variation_get_regular_price', 'm_varient_price' , 99, 2 );  
add_filter( 'woocommerce_product_variation_get_sale_price', 'm_varient_price' , 99, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'm_varient_price', 99, 2 );