在 Woocommerce 中发送带有动态主题和收件人的自定义电子邮件
Send a custom email with a dynamic subject and recipient in Woocommerce
在 Woocommerce 中,我已经能够创建带有按钮的自定义元框,该按钮使用 Send a custom email when WooCommerce checkout button is pressed 现有的答案代码发送电子邮件。它显示以下元框:
所以当我点击按钮时它会发送一封电子邮件,效果很好。
我的问题:
我如何自定义该代码以发送自定义电子邮件,因为我只需要将 "Subject"(带有订单 ID 和付款总额)发送到电子邮件地址,其格式应为:mobilenumber@domain.com
(因此它将被发送到 SMS 网关并在移动设备上作为 SMS 发送)?
例如:
邮箱:123456789@smsgateway.com
主题:您的订单 {order_id} 已完成。总计:{order_total}。谢谢
已更新
第一个功能是可选的,将为手机显示必填的结帐字段phone。
第二个功能代码在 woocommerce 管理订单编辑页面中显示一个 metabox,其中包含一个将触发该操作的自定义按钮。按下时,它将使用以下内容将自定义电子邮件发送到 SMS 网关:
- 包含订单号和总金额的特定动态主题
- 由客户手机组成的特定电子邮件地址 phone 和特定的 SMS 网关域名,例如
'smsgateway.com'
。
Note: When using wp_mail()
function, the message is mandatory (if there is no message or an empty one, the email is not sent).
代码:
// 1. Add mandatory billing phone field (and save the field value in the order)
add_filter( 'woocommerce_billing_fields', 'add_billing_mobile_phone_field', 20, 1 );
function add_billing_mobile_phone_field( $billing_fields ) {
$billing_fields['billing_mobile_phone'] = array(
'type' => 'text',
'label' => __("Mobile phone", "woocommerce") ,
'class' => array('form-row-wide'),
'required' => true,
'clear' => true,
);
return $billing_fields;
}
// 2. Send a specific custom email to a SMS gateway from a meta box
// Add a metabox
add_action( 'add_meta_boxes', 'order_metabox_email_to_sms' );
function order_metabox_email_to_sms() {
add_meta_box( 'sms_notification',
__( 'SMS notification', "woocommerce" ),
'order_metabox_content_email_to_sms',
'shop_order', 'side', 'high' );
}
// Metabox content: Button and SMS processing script
function order_metabox_content_email_to_sms(){
global $pagenow;
if( $pagenow != 'post.php' || get_post_type($_GET['post']) != 'shop_order' )
return; // Exit
if ( ! ( isset($_GET['post']) && $_GET['post'] > 0 ) )
return; // Exit
$order_id = $_GET['post'];
$is_sent = get_post_meta( $order_id, '_sms_email_sent', true );
// Sending SMS
if ( isset($_GET['send_sms']) && $_GET['send_sms'] && ! $is_sent ) {
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );
// Using the billing mobile phone if it exist, or the billing phone if not.
if( $mobile_phone = $order->get_meta( '_billing_mobile_phone' ) ) {
$phone = $mobile_phone;
} else {
$phone = $order->get_billing_phone();
}
// Email address: Customer mobile phone + @ + sms domain
$send_to = $phone . '@' . 'smsgateway.com';
// Subject with the order ID and the order total amount
$subject = sprintf(
__("Your order number %d with a total of %s is being processed. Thank you.", "woocommerce"),
$order_id, html_entity_decode( strip_tags( wc_price( $order->get_total() ) ) )
);
// Message: It is required (we just add the order number to it).
$message = $order_id;
// Sending this custom email
$trigger_send = wp_mail( $send_to, $subject, $message );
// Displaying the result
if( $trigger_send ) {
$result = '<span style="color:green;">' ;
$result .= __( "The SMS is being processed by the gateway." );
// On email sent with success, Mark this email as sent in the Order meta data (To avoid repetitions)
update_post_meta( $order_id, '_sms_email_sent', $trigger_send );
} else {
$result = '<span style="color:red;">' ;
$result .= __( "Sorry, but the SMS is not processed." );
}
$result .= '</span>';
}
// Displaying the button
$href = '?post=' . $order_id . '&action=edit&send_sms=1';
$send_text = isset($is_sent) && $is_sent ? '<em><small style="float:right;"> ('. __("Already sent") . ')</small></em>' : '';
echo '<p><a href="' . $href . '" class="button">' . __( "Send SMS" ) . '</a>'.$send_text.'</p>';
// Displaying a feed back on send
echo isset($result) ? '<p><small>' . $result . '</small></p>' : false;
}
代码进入活动子主题(或活动主题)的 function.php 文件。已测试并有效。
这个metabox中的四种可能性:
Once the SMS is sent once, the feature becomes inactive, to avoid any repetitions.
在 Woocommerce 中,我已经能够创建带有按钮的自定义元框,该按钮使用 Send a custom email when WooCommerce checkout button is pressed 现有的答案代码发送电子邮件。它显示以下元框:
所以当我点击按钮时它会发送一封电子邮件,效果很好。
我的问题:
我如何自定义该代码以发送自定义电子邮件,因为我只需要将 "Subject"(带有订单 ID 和付款总额)发送到电子邮件地址,其格式应为:mobilenumber@domain.com
(因此它将被发送到 SMS 网关并在移动设备上作为 SMS 发送)?
例如:
邮箱:123456789@smsgateway.com
主题:您的订单 {order_id} 已完成。总计:{order_total}。谢谢
已更新
第一个功能是可选的,将为手机显示必填的结帐字段phone。
第二个功能代码在 woocommerce 管理订单编辑页面中显示一个 metabox,其中包含一个将触发该操作的自定义按钮。按下时,它将使用以下内容将自定义电子邮件发送到 SMS 网关:
- 包含订单号和总金额的特定动态主题
- 由客户手机组成的特定电子邮件地址 phone 和特定的 SMS 网关域名,例如
'smsgateway.com'
。
Note: When using
wp_mail()
function, the message is mandatory (if there is no message or an empty one, the email is not sent).
代码:
// 1. Add mandatory billing phone field (and save the field value in the order)
add_filter( 'woocommerce_billing_fields', 'add_billing_mobile_phone_field', 20, 1 );
function add_billing_mobile_phone_field( $billing_fields ) {
$billing_fields['billing_mobile_phone'] = array(
'type' => 'text',
'label' => __("Mobile phone", "woocommerce") ,
'class' => array('form-row-wide'),
'required' => true,
'clear' => true,
);
return $billing_fields;
}
// 2. Send a specific custom email to a SMS gateway from a meta box
// Add a metabox
add_action( 'add_meta_boxes', 'order_metabox_email_to_sms' );
function order_metabox_email_to_sms() {
add_meta_box( 'sms_notification',
__( 'SMS notification', "woocommerce" ),
'order_metabox_content_email_to_sms',
'shop_order', 'side', 'high' );
}
// Metabox content: Button and SMS processing script
function order_metabox_content_email_to_sms(){
global $pagenow;
if( $pagenow != 'post.php' || get_post_type($_GET['post']) != 'shop_order' )
return; // Exit
if ( ! ( isset($_GET['post']) && $_GET['post'] > 0 ) )
return; // Exit
$order_id = $_GET['post'];
$is_sent = get_post_meta( $order_id, '_sms_email_sent', true );
// Sending SMS
if ( isset($_GET['send_sms']) && $_GET['send_sms'] && ! $is_sent ) {
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );
// Using the billing mobile phone if it exist, or the billing phone if not.
if( $mobile_phone = $order->get_meta( '_billing_mobile_phone' ) ) {
$phone = $mobile_phone;
} else {
$phone = $order->get_billing_phone();
}
// Email address: Customer mobile phone + @ + sms domain
$send_to = $phone . '@' . 'smsgateway.com';
// Subject with the order ID and the order total amount
$subject = sprintf(
__("Your order number %d with a total of %s is being processed. Thank you.", "woocommerce"),
$order_id, html_entity_decode( strip_tags( wc_price( $order->get_total() ) ) )
);
// Message: It is required (we just add the order number to it).
$message = $order_id;
// Sending this custom email
$trigger_send = wp_mail( $send_to, $subject, $message );
// Displaying the result
if( $trigger_send ) {
$result = '<span style="color:green;">' ;
$result .= __( "The SMS is being processed by the gateway." );
// On email sent with success, Mark this email as sent in the Order meta data (To avoid repetitions)
update_post_meta( $order_id, '_sms_email_sent', $trigger_send );
} else {
$result = '<span style="color:red;">' ;
$result .= __( "Sorry, but the SMS is not processed." );
}
$result .= '</span>';
}
// Displaying the button
$href = '?post=' . $order_id . '&action=edit&send_sms=1';
$send_text = isset($is_sent) && $is_sent ? '<em><small style="float:right;"> ('. __("Already sent") . ')</small></em>' : '';
echo '<p><a href="' . $href . '" class="button">' . __( "Send SMS" ) . '</a>'.$send_text.'</p>';
// Displaying a feed back on send
echo isset($result) ? '<p><small>' . $result . '</small></p>' : false;
}
代码进入活动子主题(或活动主题)的 function.php 文件。已测试并有效。
这个metabox中的四种可能性:
Once the SMS is sent once, the feature becomes inactive, to avoid any repetitions.