我最近有一个客户要求,他们希望他们出售的每本图书都为客人提供10%的折扣,为会员提供30%的折扣。
我通过应用产品的销售价格(如果他/她是客人或会员)来实现这一目标。
add_filter( 'woocommerce_product_get_price', 'rp_custom_dynamic_sale_price', 10, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'rp_custom_dynamic_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_sale_price', 'rp_custom_dynamic_sale_price', 10, 2 );
function rp_custom_dynamic_sale_price( $sale_price, $product ) {
if(is_admin()) return false;
$regular_price = $product->get_regular_price();
$sale_price_if_member = $regular_price - ($regular_price*0.25);
$sale_price_if_guest = $regular_price - ($regular_price*0.10);
if( pmpro_hasMembershipLevel(array('1','2','3','4'))){
if( $product->slug == 'one-year-membership' || $product->slug == 'two-year-membership' || $product->slug == 'three-years-membership' ){
return $sale_price;
}
if( empty($sale_price) || $sale_price == 0 ){
return $sale_price_if_member;
}
// when sale discount is high then sale_price is less than member's discounted price
if( $sale_price < $sale_price_if_member ){
return $sale_price;
}else{
return $sale_price_if_member;
}
}else{
if( $product->slug == 'one-year-membership' || $product->slug == 'two-year-membership' || $product->slug == 'three-years-membership' ) {
return $sale_price;
}
if( empty($sale_price) || $sale_price == 0 ){
return $sale_price_if_guest;
}
if($sale_price < $sale_price_general){
return $sale_price;
}else{
return $sale_price_if_guest;
}
}
}
现在,挑战就在这里,当客户在购物车上使用优惠券代码时,与全球折扣相比,我必须应用最大折扣。
意思是, 案例1 :假设如果客户是会员,我们会通过向产品添加销售价格来在全球范围内应用30%的折扣,当商店的会员应用40%的优惠券代码时,我们必须应用40% %折扣并删除该客户的全球折扣。同样的情况,如果客户是客人,我们将在全球范围内应用10%,如果他/她应用40%,那么我们需要删除10%并应用40%的优惠券折扣。
案例2 :在这里说我们的购物车中有一些产品 A 出售20%的折扣, B 可以在其中应用优惠券并最初应用了10%或30%的全球折扣, C 既不销售也不应用优惠券,但具有10%或30%的全球折扣。为了进行计算,如果客户是会员, A 应获得30%的折扣,如果客人是会员,则保留20%的折扣。如果 B 优惠券折扣大于10%或30%,则以折扣为准。 C 的全球折扣是正确的。
因此,我的问题是,如果客户使用优惠券,则在购物车上应用最大折扣。如果我不在购物车中使用优惠券代码,之前所做的所有工作都可以正常工作。
我需要一些建议,将优惠券代码应用于销售价格,计算购物车中每种产品的优惠券折扣,并应用与全球折扣和销售价格相比的最大折扣。
当我们在优惠券和优惠券类型上考虑不同的设置时,涉及的条件更多。
我该怎么办?