有条件的自定义新订单Woocommerce电子邮件通知不同的收件人



好的,我有一个来自客户的问题,这似乎并非不可能,但正确设置条件对我来说是一个问题。这是正在发生的事情和我需要的。我真的希望这是一个可能的功能。

存储具有用户层次结构。有 2x 超级管理员 (ID: admin)、5x 管理员 (ID: admin2)、15x 银行客户 (ID: 银行) 和 2x 房地产客户 (ID: 房地产)。我已经使用ID设置了自定义用户。没有产品有定价。所有内容都与order_info一起通过电子邮件开具发票。一切都在以后的房子里支付。所以该网站确实依赖于电子邮件。

  1. 如果 15x 银行客户下new_order,这些new_order需要将电子邮件发票发送给 5x 管理员。
  2. 如果 2x 房地产客户下new_order,这些new_order需要将电子邮件发票发送给 5x 管理员。
  3. 如果 5 位管理员下达了new_order,则这些new_order需要将电子邮件帐单发送给 2 位超级用户。

我不是 php 最伟大的,我以前的东西非常草率。

有什么帮助吗?

你可以在函数中使用 wc hook,如下所示.php filr

add_action( 'woocommerce_new_order', 'send_email_to_admin', 1, 1 ); 函数 send_email_to_admin($order_id) { 使用订单 ID 查找用户 ID 并发送电子邮件 }

使用woocommerce_thankyou操作挂钩中的自定义函数,将允许您根据用户角色和自定义多个收件人制作条件电子邮件通知。

您需要在此功能中替换管理员和超级管理员电子邮件。

您还需要检查用户角色是否在 3 if 语句中匹配...房地产的 ID 通常不能有空格,而应该是:'real_estate'

这将为状态为"暂停"、"待处理"、"正在处理"或"已完成"的订单发送电子邮件通知...

触发此自定义电子邮件后,将为订单设置自定义字段'_custom_emails_sent'

这是代码:

add_action( 'woocommerce_thankyou', 'custom_new_order_email_notifications', 10, 1 );
function custom_new_order_email_notifications( $order_id ){
// If Custom Emails already sent we exit
if( get_post_meta( $order_id, '_custom_emails_sent', true ) ) return;
$targeted_statuses = array( 'wc-on-hold', 'wc-pending', 'wc-processing', 'wc-completed' );
$order_status = get_post_status( $order_id );
// Only for the correct order statuses; If not we exit
if( ! in_array( $order_status, $targeted_statuses ) ) return;
// HERE (below) replace super admins and admins REAL emails
$super_admin_emails = array( 
'supadmin1@example.com', 'supadmin2@example.com' );
$admin_emails = array(
'admin1@example.com', 'admin2@example.com',
'admin3@example.com', 'admin4@example.com', 'admin5@example.com' );
// Get the user of the order
$user_id = get_post_meta( $order_id, '_customer_user', true );
$user = get_userdata( $user_id );
$recipient = '';
// 1. Bank Customers user role
if( in_array('banks', $user->roles) ){
$recipients = implode(',', $admin_emails);
}
// 2. Real estate Customers user role
if( in_array('real_estate', $user->roles) ){
$recipients = implode(',', $admin_emails);
}
// 3. Admins Customers user role
if( in_array('admin2', $user->roles) ){
$recipients = implode(',', $admin_emails);
}
// Sending new order email notification to the targeted recipients
if( '' != $recipients ){
$mailer = WC()->mailer()->get_emails();
$mailer['WC_Email_New_Order']->recipient = $recipients;
$mailer['WC_Email_New_Order']->trigger( $order_id ); // sending
// We set a custom field that will avoid repetitive sends
update_post_meta( $order_id, '_custom_emails_sent', '1' );
}
}

代码进入函数.php活动子主题(或活动主题)的文件。

经过测试和工作

最新更新