如何在WooCommerce的cart.php中无钩子拦截移除商品后的通知数据数组
在WooCommerce中无钩子拦截移除商品后的通知data数组

可以实现,但直接修改cart.php的方式不推荐——因为WooCommerce更新时会覆盖核心模板文件,建议把模板复制到主题的woocommerce/cart/目录下再修改,避免更新丢失改动。
具体操作步骤:
- 找到目标
cart.php文件,在通知渲染的代码段之前(比如wc_print_notices()函数调用之前)插入以下代码:
// 从session中读取所有WooCommerce通知 $wc_notices = WC()->session->get('wc_notices'); // 定位到成功类型的通知(移除商品通常触发成功通知) if (isset($wc_notices['success'])) { foreach ($wc_notices['success'] as $notice_idx => $notice_details) { // 筛选出移除商品相关的通知(可根据通知文本特征判断) if (strpos($notice_details['notice'], '已从购物车移除') !== false) { // 这里直接获取通知的data数组及其键名 $notification_data = $notice_details['data'] ?? []; // 输出键名示例(可根据需求替换成自定义逻辑) if (!empty($notification_data)) { echo '<div>通知data数组键名:' . implode(', ', array_keys($notification_data)) . '</div>'; } // 如果需要修改data数组,直接操作后更新session即可 // $wc_notices['success'][$notice_idx]['data']['custom_key'] = 'custom_value'; // WC()->session->set('wc_notices', $wc_notices); } } }
- 原理:WooCommerce的通知会临时存在session的
wc_notices键下,你可以直接读取这个session数据,找到对应移除商品的通知项,就能拿到其data数组和键名。
⚠️ 注意:这种方式绕过了WooCommerce的钩子机制,后续版本更新可能会改变通知的存储结构,导致代码失效。如果没有特殊限制,优先使用woocommerce_add_notice钩子来处理通知会更稳妥。
内容的提问来源于stack exchange,提问作者Greg Bialowas
相关产品推荐
相关产品推荐

