web-dev-qa-db-ja.com

woocommerce_get_priceフィルタフックが商品バリエーション価格で機能しない

「販売代理店」の役割でログインしているユーザーに基づいて商品の価格を変更しました。これは私のデフォルト製品では機能しますが、製品バリエーション製品では機能しません。

そのため、製品の50mlのバリエーションに対する私の製品価格は9.20です。 「再販業者」は6.16(9.20 * 0.67)を支払う必要があります。私のバリエーション製品の出力はまだ9.20です..

フィルターフック:

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 );

製品と製品のバリエーション

// 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

私は同様に製品バリエーションのためにフィルターフックを加えなければなりませんでした。

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