基于购买产品替换WooCommerce新订单收件邮箱并取消默认收件
解决WooCommerce新订单邮件仅发送指定邮箱的问题
你的代码目前是在WooCommerce默认收件人基础上追加匹配的邮箱,所以默认邮箱会一直收到邮件。要实现仅发送给你指定的邮箱,只需修改逻辑,先清空默认收件人,再添加匹配的目标邮箱,同时避免重复添加同一个邮箱。
修改后的完整代码如下:
add_filter( 'woocommerce_email_recipient_new_order', 'custom_email_recipient_new_order', 10, 2 ); function custom_email_recipient_new_order( $recipient, $order ) { // 非订单对象时返回原收件人(避免后台报错) if( ! is_a($order, 'WC_Order') ) return $recipient; // 定义邮箱与对应产品ID的映射 $recipients_product_ids = array( 'product.one@email.com' => array(23), 'product.two@email.com' => array(24), 'product.three@email.com' => array(53, 57), ); // 初始化空数组存储匹配的邮箱,避免重复 $matched_recipients = array(); // 遍历订单商品 foreach ( $order->get_items() as $item ) { $product_id = $item->get_product_id(); $variation_id = $item->get_variation_id(); // 遍历预设的邮箱-产品映射 foreach ( $recipients_product_ids as $email => $product_ids ) { // 检查当前商品ID或变体ID是否在目标产品列表中 if( array_intersect([$product_id, $variation_id], $product_ids) ) { $matched_recipients[$email] = $email; // 用数组键自动去重 } } } // 将数组转为逗号分隔的收件人字符串,无匹配时返回空(若需要可改为指定默认邮箱) return !empty($matched_recipients) ? implode(',', $matched_recipients) : ''; }
关键修改说明:
- 用
$matched_recipients数组存储匹配到的邮箱,利用数组键的唯一性自动去重,避免同一个邮箱被多次添加 - 不再基于默认收件人追加,而是完全替换为你指定的匹配邮箱
- 最后通过
implode将数组转为WooCommerce要求的逗号分隔收件人格式 - 如果订单无匹配产品,返回空字符串则不会发送邮件;若需要这种情况仍发送到某个邮箱,可把
''改成对应邮箱地址
内容的提问来源于stack exchange,提问作者Mattias
相关产品推荐
相关产品推荐

