仅限 Woocommerce 中第二件商品的数量折扣
Quantity discount on 2nd item only in Woocommerce
我想为所有产品实现全局折扣,但只针对第二个产品项目。
我是什么意思?
如果客户购买 "Jacket" 则不给予折扣。
客户购买了两个 "Jacket" 产品。第二个优惠20% "Jacket".
客户购买了五件 "Jacket" 产品。 2号还是只有20折"Jacket".
它应该适用于所有简单产品和可变产品。
我想出了这么多,我正在寻求帮助,了解如何让折扣仅适用于第二件商品。
代码如下:
add_filter('woocommerce_product_get_price', 'fifty_percent_on_second_product', 90, 2 );
add_filter('woocommerce_product_get_regular_price', 'fifty_percent_on_second_product', 90, 2 );
function fifty_percent_on_second_product( $price, $product ) {
if ( is_user_logged_in() ) {
I do not know what to do here
}
return $price;
}
有谁知道如何进行这项工作?如果是这样,请帮助我。
add_action( 'woocommerce_before_calculate_totals', 'set_the_discount' );
function set_the_discount( $cart ) {
foreach ( $cart->cart_contents as $key => $value ) {
//please check whether your item is the second item of your cart or not?
//if this is your second item in your cart
//Set the 50% discount
$product_id = $value['product_id'];
$product = wc_get_product($product_id);
$get_price = $product->get_price();
$new_price = $get_price / 2;
$value['data']->set_price($new_price);
}
}
This hook can be used to set the price directly to the cart. Hope this may help
foreach ( $cart->cart_contents as $key => $values ) {
$product_id = $values['product_id'];
foreach ($cart->get_cart_item_quantities() as $key => $value){
//print_r($key[1]);
$key = array_keys($cart->get_cart_item_quantities())[1];
if($key == $product_id){
$product = wc_get_product($product_id);
$get_price = $product->get_price();
$new_price = $get_price / 2;
$values['data']->set_price($new_price);
break;
}
}
}
//Please try this, it will work for sure in same above hook :)
您只能通过这种方式使用费用 API 获得第二件商品的折扣 (20%):
add_action( 'woocommerce_cart_calculate_fees', 'second_item_discount', 10, 1 );
function second_item_discount( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$percentage = 20; // 20%
$discount = 0;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// When quantity is more than 1
if( $cart_item['quantity'] > 1 ){
// 20% of the product price as a discount
$discount += wc_get_price_excluding_tax( $cart_item['data'] ) * $percentage / 100;
}
}
if( $discount > 0 )
$cart->add_fee( __( '2nd item discount', 'woocommerce' ) , -$discount );
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
我想为所有产品实现全局折扣,但只针对第二个产品项目。
我是什么意思? 如果客户购买 "Jacket" 则不给予折扣。
客户购买了两个 "Jacket" 产品。第二个优惠20% "Jacket".
客户购买了五件 "Jacket" 产品。 2号还是只有20折"Jacket".
它应该适用于所有简单产品和可变产品。
我想出了这么多,我正在寻求帮助,了解如何让折扣仅适用于第二件商品。
代码如下:
add_filter('woocommerce_product_get_price', 'fifty_percent_on_second_product', 90, 2 );
add_filter('woocommerce_product_get_regular_price', 'fifty_percent_on_second_product', 90, 2 );
function fifty_percent_on_second_product( $price, $product ) {
if ( is_user_logged_in() ) {
I do not know what to do here
}
return $price;
}
有谁知道如何进行这项工作?如果是这样,请帮助我。
add_action( 'woocommerce_before_calculate_totals', 'set_the_discount' );
function set_the_discount( $cart ) {
foreach ( $cart->cart_contents as $key => $value ) {
//please check whether your item is the second item of your cart or not?
//if this is your second item in your cart
//Set the 50% discount
$product_id = $value['product_id'];
$product = wc_get_product($product_id);
$get_price = $product->get_price();
$new_price = $get_price / 2;
$value['data']->set_price($new_price);
}
}
This hook can be used to set the price directly to the cart. Hope this may help
foreach ( $cart->cart_contents as $key => $values ) {
$product_id = $values['product_id'];
foreach ($cart->get_cart_item_quantities() as $key => $value){
//print_r($key[1]);
$key = array_keys($cart->get_cart_item_quantities())[1];
if($key == $product_id){
$product = wc_get_product($product_id);
$get_price = $product->get_price();
$new_price = $get_price / 2;
$values['data']->set_price($new_price);
break;
}
}
}
//Please try this, it will work for sure in same above hook :)
您只能通过这种方式使用费用 API 获得第二件商品的折扣 (20%):
add_action( 'woocommerce_cart_calculate_fees', 'second_item_discount', 10, 1 );
function second_item_discount( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$percentage = 20; // 20%
$discount = 0;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// When quantity is more than 1
if( $cart_item['quantity'] > 1 ){
// 20% of the product price as a discount
$discount += wc_get_price_excluding_tax( $cart_item['data'] ) * $percentage / 100;
}
}
if( $discount > 0 )
$cart->add_fee( __( '2nd item discount', 'woocommerce' ) , -$discount );
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。