根据选定的自定义结账字段值添加自定义电子邮件收件人
问题描述:
我需要Woocommerce根据为字段签帐选择的选项向其他个人发送自定义电子邮件(技术上,自定义字段是报告产品变体的人员已经购买,但我不知道如何根据购买的产品变体定制电子邮件收据,所以如下)。根据选定的自定义结账字段值添加自定义电子邮件收件人
首先,我用下面的代码
/**
* Add the field to the checkout
*/
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field($checkout) {
echo '<div id="my_custom_checkout_field"><h2>' . __('Membership') . '</h2>';
woocommerce_form_field('my_field_name', array(
'type' => 'select',
'class' => array('wps-drop'),
'label' => __('Membership purchased'),
'options' => array(
'blank' => __('Select membership ordered', 'wps'),
'premium' => __('Premium Membership', 'wps'),
'gold' => __('Gold Membership', 'wps'),
'silver' => __('Silver Membership', 'wps'),
'bronze' => __('Bronze Membership', 'wps')
)
), $checkout->get_value('my_field_name'));
echo '</div>';
}
/**
* Process the checkout
*/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
// Check if set, if its not set add an error.
if (! $_POST['my_field_name'] =='blank')
wc_add_notice(__('Please select status.'), 'error');
}
建立的自定义字段然后我根据选择的值设置电子邮件收据:
add_filter('woocommerce_email_recipient_new_order', 'new_order_conditional_email_recipient', 10, 2);
function new_order_conditional_email_recipient($recipient, $order) {
// Get the order ID (retro compatible)
$order_id = method_exists($order, 'get_id') ? $order->get_id() : $order->id;
// Get the custom field value (with the right $order_id)
$my_field_name = get_post_meta($order_id, 'my_field_name', true);
if ($my_field_name == "premium")
$recipient .= ', [email protected]';
elseif ($my_field_name == "gold")
$recipient .= ', [email protected]';
elseif ($my_field_name == "silver")
$recipient .= ', [email protected]';
elseif ($my_field_name == "bronze")
$recipient .= ', [email protected]';
return $recipient;
}
当我使用此代码,虽然,没有收据的谁应该会收到他们指定的电子邮件。代码有什么问题?
答
您错过了将选定的自定义字段值保存在订单元数据中。我也重新审视你的代码位:
// Add custom checkout field
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
function my_custom_checkout_field($checkout) {
echo '<div id="my_custom_checkout_field"><h2>' . __('Membership') . '</h2>';
woocommerce_form_field('my_field_name', array(
'type' => 'select',
'class' => array('wps-drop'),
'label' => __('Membership purchased'),
'required' => true, // Missing
'options' => array(
'' => __('Select membership ordered', 'wps'),
'premium' => __('Premium Membership', 'wps'),
'gold' => __('Gold Membership', 'wps'),
'silver' => __('Silver Membership', 'wps'),
'bronze' => __('Bronze Membership', 'wps')
)
), $checkout->get_value('my_field_name'));
echo '</div>';
}
// Process the checkout
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
// Check if set, if its not set add an error.
if (empty($_POST['my_field_name']))
wc_add_notice(__('Please select status.'), 'error');
}
// Save the custom checkout field in the order meta
add_action('woocommerce_checkout_update_order_meta', 'my_custom_field_checkout_update_order_meta', 10, 1);
function my_custom_field_checkout_update_order_meta($order_id) {
if (! empty($_POST['my_field_name']))
update_post_meta($order_id, 'my_field_name', $_POST['my_field_name']);
}
add_filter('woocommerce_email_recipient_new_order', 'new_order_conditional_email_recipient', 10, 2);
function new_order_conditional_email_recipient($recipient, $order) {
// Get the order ID (retro compatibility)
$order_id = method_exists($order, 'get_id') ? $order->get_id() : $order->id;
// Get the custom field value (with the right $order_id)
$my_field_name = get_post_meta($order_id, 'my_field_name', true);
if ($my_field_name == "premium")
$recipient .= ', [email protected]';
elseif ($my_field_name == "gold")
$recipient .= ', [email protected]';
elseif ($my_field_name == "silver")
$recipient .= ', [email protected]';
elseif ($my_field_name == "bronze")
$recipient .= ', [email protected]';
return $recipient;
}
代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。
在WooCommerce 3+中测试并正常工作。
正如你将看到收件人取决于客户选择的“新秩序”的电子邮件通知正确添加。