web-dev-qa-db-fra.com

le crochet de filtrage woocommerce_get_price ne fonctionne pas pour le prix de la variation du produit

J'ai modifié le prix de mon produit en fonction d'un utilisateur connecté avec un rôle de "revendeur". Cela fonctionne pour mes produits par défaut, mais pas pour mes produits avec variantes.

Donc, le prix de mon produit pour une variation de 50 ml du produit est de 9,20. Un "revendeur" devrait payer 6.16 (9.20 * 0.67). La sortie de mon produit de variante est toujours de 9.20 ..

Crochet de filtre:

function pr_reseller_price( $price, $product ) {

   if ( ! is_user_logged_in() )
      return $price;

   // Function which checks if logged in user is reseller
   if ( pr_has_role( 'reseller' ) ) {
      $price = $price * 0.67;
   }
   return $price;

}
add_filter( 'woocommerce_get_price', 'pr_reseller_price', 10, 2 );
add_filter( 'woocommerce_get_regular_price', 'pr_reseller_price', 10, 2 );
add_filter( 'woocommerce_get_sale_price', 'pr_reseller_price', 10, 2 );

Produit vs variation de produit

// Product
$product_id = 69;
$product = wc_get_product( $product_id );
echo $product->get_price(); // Returns 6.16 (9.20 * 0.67)

// Product variation
$variations = $product->get_available_variations();
$variation = new WC_Product_Variation( $variations[0]['variation_id'] );
echo $variation->get_price(); // Returns 9.20
1
Robbert

J'ai également dû ajouter le crochet de filtre pour la variation du produit.

add_filter( 'woocommerce_product_get_price', 'pr_reseller_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_price', 'pr_reseller_price', 10, 2 );
add_filter( 'woocommerce_product_get_regular_price', 'pr_reseller_price', 10, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'pr_reseller_price', 10, 2 );
1
Robbert