如何禁用带有指定自定义属性的WooCommerce订单的新订单通知
解决方案
首先明确你原有代码不生效的核心问题:
- 自定义字段
ced_shopee_order_shop_id、ced_lazada_seller_id是订单级别的元数据,不是绑定在订单项上的,你遍历订单商品项获取字段的逻辑本身就是错的 - 你把
return语句放在了foreach循环内部,第一次循环就会直接返回结果,后续逻辑完全不会执行 - 你固定判断字段值为指定ID,不符合只要订单带有这两个字段就屏蔽通知的需求
以下是修正后的可用代码,直接添加到主题的functions.php文件或者自定义代码片段插件中即可:
add_filter('woocommerce_email_recipient_new_order', 'disable_cross_platform_order_notification', 10, 2); function disable_cross_platform_order_notification($recipient, $order) { // 避免影响WooCommerce邮件设置页面的正常功能 $page = isset($_GET['page']) ? $_GET['page'] : ''; if ('wc-settings' === $page) { return $recipient; } // 校验订单对象有效性 if (!$order instanceof WC_Order) { return $recipient; } // 直接从订单对象获取两个跨境平台标识字段 $shopee_id = $order->get_meta('ced_shopee_order_shop_id'); $lazada_id = $order->get_meta('ced_lazada_seller_id'); // 只要存在任意一个平台标识字段,就清空收件人,不发送新订单通知 if (!empty($shopee_id) || !empty($lazada_id)) { $recipient = ''; } return $recipient; }
代码逻辑说明:
- 仅会屏蔽带有Shopee/Lazada标识的同步订单通知,站点自行下单的订单没有这两个字段,会正常发送通知
- 不需要绑定固定的平台ID值,只要字段存在就触发屏蔽规则,适配多店铺同步的场景
内容的提问来源于stack exchange,提问作者Jae
相关产品推荐
相关产品推荐

