也许有一种方法可以做到这一点,但简单地浏览相关函数表明,我基本上无法控制要删除的项目,或者调用wc_add_notice
标记为已删除。
因此,我最终采用了以下相当简单但略显丑陋的方法:
add_action(\'woocommerce_cart_item_removed\', function($key, $cart){
// SNIP - My logic to decide if this item can\'t be removed by itself
$cart->restore_cart_item($key);
wc_add_notice(\'This package is tied to another product in your basket.\', \'error\');
add_filter(\'woocommerce_add_success\', \'__return_false\');
}, 5, 2);
基本上,我恢复了该项目,并添加了一个错误通知,通知用户我们无法删除它。然后,对于当前请求的其余部分,我过滤任何新的成功通知,以将文本替换为
FALSE
.
用于显示通知的代码使用array_filter
排除列表中等同于false的任何元素,以便在添加消息时,不会显示任何文本。
移除篮子项目后,代码路径将从WC_Form_Handler
只需添加“已删除”通知并执行wp_safe_redirect
, 因此,就我所知,在这一点上,压倒一切的通知不应该有任何其他不利影响。