gpt4 book ai didi

php - Woocommerce 购物车通知显示多次

转载 作者:行者123 更新时间:2023-12-02 00:44:09 30 4
gpt4 key购买 nike

我有一个正常工作的功能,除了它在购物车中显示通知两次而不是一次。该函数应用折扣并显示通知。该函数查找特定类别的项目并添加总计,如果满足折扣金额,则应用折扣并显示通知。现在,即使购物车中只有一件商品,它也会显示两次通知。

我已经尝试添加 wc_clear_notices() 但这将清除我需要的其他通知,例如类别最小订单金额的 min max 通知。如果我在函数开头或任何 foreach 语句中添加 wc_clear_notices(),它甚至会在显示之前清除其他最小/最大通知。

这里有一些我已经看过但只是说使用 wc_clear_notices() 的问题,它不起作用,因为其他通知被清除了:

WooCommerce Notice, run only once

Show wc_add_notice only one time

这是我目前拥有的正确打折商品并显示通知但显示通知两次而不是一次的代码:

//apply discounts to foil and seal product categories
add_action( 'woocommerce_before_calculate_totals', 'cart_count_foil_seal_items',10,1);

function cart_count_foil_seal_items( $cart_object ) {
$seal_prod_tally = 0;
$foil_prod_tally = 0;
// Iterating through each item in cart
foreach ( $cart_object->get_cart() as $item_values ) {
// Get cart item data
$item_id = $item_values['data']->get_id(); // Product ID
$item_qty = $item_values['quantity']; // Item quantity

// Getting the object
$product = new WC_Product( $item_id );
$prod_cat = wp_get_post_terms($product->get_id(),'product_cat',array('fields'=>'slugs'));

//tally total
if (in_array('seal-stickers', $prod_cat)){
$seal_prod_tally += $item_qty;
}else if(in_array('foil-badges', $prod_cat)){
$foil_prod_tally += $item_qty;
}
}

foreach ( $cart_object->get_cart() as $item_values ) {

//Get cart item data
$item_id = $item_values['data']->get_id(); // Product ID
$item_qty = $item_values['quantity']; // Item quantity

// Getting the object
$product = new WC_Product( $item_id );
$prod_cat2 = wp_get_post_terms($product->get_id(),'product_cat',array('fields'=>'slugs'));

//apply discount to each item within category

if (in_array('seal-stickers',$prod_cat2)){

switch ($seal_prod_tally){
case 20000:
$item_values['data']->set_price(1327.01/20000);
if(!is_checkout()){
wc_add_notice(
sprintf( 'Quantity discount has been applied to item %s: 20,000 at $1327.01.', $item_values['data']->get_title()
), 'notice'
);
}
break;
case 30000:
$item_values['data']->set_price(1578.65/30000);
if(!is_checkout()){
wc_add_notice(
sprintf( 'Quantity discount has been applied to item %s: 30,000 at $1578.65.', $item_values['data']->get_title()
), 'notice'
);
}
break;
case 40000:
$item_values['data']->set_price(1853.05/40000);
if(!is_checkout()){
wc_add_notice(
sprintf( 'Quantity discount has been applied to item %s: 40,000 at $1853.05.', $item_values['data']->get_title()
), 'notice'
);
}
break;
case 50000:
$item_values['data']->set_price(2126.76/50000);
if(!is_checkout()){
wc_add_notice(
sprintf( 'Quantity discount has been applied to item %s: 50,000 at $2126.76.', $item_values['data']->get_title()
), 'notice'
);
}
break;
case 60000:
$item_values['data']->set_price(2405.98/60000);
if(!is_checkout()){
wc_add_notice(
sprintf( 'Quantity discount has been applied to item %s: 60,000 at $2405.98.', $item_values['data']->get_title()
), 'notice'
);
}
break;
default:
break;
}
}else if (in_array( 'foil-badges',$prod_cat2)){
switch ($foil_prod_tally){
case 25000:
$item_values['data']->set_price(5872.63/25000);
if(!is_checkout()){
wc_add_notice(
sprintf( 'Quantity discount has been applied to item %s: 25,000 at $5872.63.', $item_values['data']->get_title()
), 'notice'
);
}
break;
case 50000:
$item_values['data']->set_price(10815.47/50000);
if(!is_checkout()){
wc_add_notice(
sprintf( 'Quantity discount has been applied to item %s: 50,000 at $10815.47.', $item_values['data']->get_title()
), 'notice'
);
}
break;
default:
break;
}
}
}

}

Screenshot of Duplicated Notice in Cart

最佳答案

当客户使用“更新购物车”按钮更新购物车时会导致出现多个通知,因此快速解决方法是在客户每次单击“更新购物车”按钮时清除通知。

最好从源头上解决问题,即找到一种不同的方式来显示通知而不重复,但在此之前这会达到预期的效果。

//clear notices on cart update
function clear_notices_on_cart_update() {
wc_clear_notices();
};

// add the filter
add_filter( 'woocommerce_update_cart_action_cart_updated', 'clear_notices_on_cart_update', 10, 1 );

关于php - Woocommerce 购物车通知显示多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44894118/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com