基本上,在woocommerce中,您可以选择输入多个电子邮件地址(以逗号分隔),以便将完成的订单发送给WooCommerce中的>设置 - >电子邮件 - >新命令。但我需要一种方法,根据订购产品的客户的邮政编码,只发送给其中一个收件人。或完全覆盖woocommerce的处理方式。
如何绑定到负责此功能的功能,以便发送给正确的收件人?基本上,是否有为此定义的钩子,或者是否存在这样的插件,或者我是否必须编辑核心WooCommerce文件?如果核心文件需要编辑,有人可以指出哪些文件需要编辑正确的方向?
答案 0 :(得分:1)
每封电子邮件都有一个过滤器,可让您调整该电子邮件的收件人。过滤器名称基本上为woocommerce_email_recipient_{$email_id}
。
所以以下内容会过滤"到" " new_order"的地址电子邮件。
add_filter( 'new_order' , 'so_26429482_add_recipient', 20, 2 );
function so_26429482_add_recipient( $email, $order ) {
$additional_email = "somebody@somewhere.net";
if( $order->shipping_postcode == "90210" ){
$email = explode( ',', $email );
array_push( $email, $additional_email );
}
return $email;
}
我对条件逻辑并非100%肯定,但我认为应检查发货邮政编码,然后发送到其他电子邮件地址。
答案 1 :(得分:0)
我对helgatheviking的回答有点麻烦,而且用例也略有不同。 我的问题/需求是:
public function get_recipient()
希望有一个字符串,但正在获取一个数组。这是我所做的:
add_filter( 'woocommerce_email_recipient_new_order' , 'so_26429482_add_recipient', 20, 2 );
explode()
和array_push()
替换为字符串串联$email .= ',' . $additional_email;
。if( $order->get_payment_method() == "cod" ) { //code }
检查了付款方式。完整示例:
/* Add ISF Email copies */
add_filter( 'woocommerce_email_recipient_new_order' , 'so_26429482_add_recipient', 20, 2 );
function so_26429482_add_recipient( $email, $order ) {
//!empty($order) prevents a fatal error in WooCommerce Settings
//!empty($email) prevents the duplicate email from being sent in cases where the filter is run outside of when emails are normally sent. In my case, when using https://wordpress.org/plugins/woo-preview-emails/.
if(!empty($order) && !empty($email)) {
$additional_email = "isf@ptdev.co";
if( $order->get_payment_method() == "cod" ){
$email .= ',' . $additional_email;
} else {
$email .= ',h7@ptdev.co';
}
} //if not empty
//error_log('Payment Method: ' . $order->get_payment_method(), 0);
return $email;
}