我已经在WooCommerce结帐页面中设置了一些自定义字段。这些字段是名称和电子邮件字段。我要将电子邮件作为抄送添加到customer_on_hold_order电子邮件中。
我已经可以使用此代码执行此操作,但是它正在向抄送地址发送2封电子邮件。我的代码在做什么错了?
/* Send email to Rep Email */
add_filter( 'woocommerce_email_headers', 'send_email_to_gss_rep', 10, 3);
function send_email_to_gss_rep( $headers, $email_id, $order ) {
if ($email_id == 'customer_on_hold_order') {
$custom_rep_email = $order->get_meta( 'Rep Email', true );
if ( $custom_rep_email ) {
$headers .= 'CC: ' . $custom_rep_email . "\r\n";
}
}
return $headers;
}
这是我的完整代码:
/* Add custom fields to Woo checkout */
add_action( 'woocommerce_after_checkout_billing_form', 'my_custom_checkout_fields' );
function my_custom_checkout_fields( $checkout ) {
woocommerce_form_field( 'rep_name', array(
'type' => 'text',
'class' => array( 'rep_name' ),
'label' => __( 'Rep Name' ),
), $checkout->get_value( 'rep_name' ) );
woocommerce_form_field( 'rep_email', array(
'type' => 'email',
'class' => array( 'rep-email' ),
'label' => __( 'Rep Email' ),
), $checkout->get_value( 'rep_email' ) );
}
/* Update the order meta with custom field values */
add_action( 'woocommerce_checkout_create_order', 'my_custom_checkout_field_update_order_meta', 10, 2 );
function my_custom_checkout_field_update_order_meta( $order, $data ) {
if ( isset($_POST['rep_name']) && ! empty($_POST['rep_name']) ) {
$order->update_meta_data( 'Rep Name', sanitize_text_field( $_POST['rep_name'] ) );
}
if ( isset($_POST['rep_email']) && ! empty($_POST['rep_email']) ) {
$order->update_meta_data( 'Rep Email', sanitize_text_field( $_POST['rep_email'] ) );
}
}
/* Display the custom field value on admin order pages after billing address */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta( $order ) {
if ( ! empty($order->get_meta('Rep Name')) ){
echo '<p><strong>'.__('Rep Name').':</strong> ' . $order->get_meta('Rep Name') . '</p>';
}
if ( ! empty($order->get_meta('Rep Email')) ){
echo '<p><strong>'.__('Rep Email').':</strong> ' . $order->get_meta('Rep Email') . '</p>';
}
}
/* Display the custom field value on email notifications */
add_action( 'woocommerce_email_after_order_table', 'custom_woocommerce_email_order_meta_fields', 10, 4 );
function custom_woocommerce_email_order_meta_fields( $order, $sent_to_admin, $plain_text, $email ) {
if ( ! empty($order->get_meta('Rep Name')) ){
echo '<p><strong>'.__('Rep Name').':</strong> ' . $order->get_meta('Rep Name') . '</p>';
}
if ( ! empty($order->get_meta('Rep Email')) ){
echo '<p><strong>'.__('Rep Email').':</strong> ' . $order->get_meta('Rep Email') . '</p>';
}
}
/* Send email to Rep Email */
add_filter( 'woocommerce_email_headers', 'send_email_to_gss_rep', 10, 3);
function send_email_to_gss_rep( $headers, $email_id, $order ) {
if ($email_id == 'customer_on_hold_order') {
$gss_email = $order->get_meta( 'Rep Email', true );
if ( $gss_email ) {
$headers .= 'CC: ' . $alternative_email . "\r\n";
}
}
return $headers;
}
此外,我想获得像John Doe这样的CC电子邮件,但是当我使用类似这样的内容时,我无法使它正常工作:
$custom_rep_email = $order->get_meta('Rep Name') . '<' . $order->get_meta('Rep Name') . '>';
答案 0 :(得分:1)
已更新
在定位客户通知时,在电子邮件标题上使用带有抄送或密件抄送的woocommerce_email_headers
过滤器挂钩似乎存在错误。电子邮件发送两次。我已经在WooCommerce Github上打开an issue。
但是如果您的目标new_order
电子邮件ID不会发生。
现在要使用用户名作为抄送,您需要使用类似以下内容的
add_filter( 'woocommerce_email_headers', 'additional_cc_recipient', 10, 3 );
function additional_cc_recipient( $headers, $email_id, $order ) {
if ( $email_id === 'customer_on_hold_order' && ( $rep_email = $order->get_meta('Rep Email') ) ) {
if ( $rep_name = $order->get_meta('Rep Name') ) {
$headers .= 'Bcc: ' . utf8_decode($rep_name . ' <' . $rep_email . '>') . '\r\n';
} else {
$headers .= 'Bcc: ' . $rep_email . '\r\n';
}
}
return $headers;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。