我有一个正常工作的功能,除了在购物车中显示两次通知而不是一次。该功能应用折扣并显示通知。该函数查找特定类别的项目会增加总额,如果它符合折扣金额,则应用折扣并显示通知。现在,即使购物车中只有一件商品,它也会显示两次通知。Woocommerce购物车提示多次显示
我试过添加wc_clear_notices()
,但是会清除我需要的其他通知,例如类别上最小订单金额的最小最大通知。如果我在函数的开始处或任何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;
}
}
}
}
感谢您澄清。它看起来像它添加费用显示的通知实际上低于购物车的运费,这不会起作用,特别是如果我有多个通知。 :/ [计算费用通知的屏幕截图](https://i.gyazo.com/8300cc90915c83ca3ae73723b63e3b3c.png) – Mark
看起来我需要检查在此函数运行后是否应用了折扣,然后显示通知?你有什么想法吗?也许一个会话变量绑在购物车中? – Mark
如果我不清楚,我很抱歉。我没有使用你的代码示例。 add_fee()添加低于运费的折扣,这是不起作用的。我在问,除了add_fee()例子之外,你是否还有其他选择。 – Mark