WooCommerce根据付款方式和送货方式添加自定义电子邮件内容
问题描述:
我试图根据付款方式和送货方式的组合,向woocommerce完成订单电子邮件通知添加不同的内容。WooCommerce根据付款方式和送货方式添加自定义电子邮件内容
我迄今为止代码:
// completed order email instructions
function my_completed_order_email_instructions($order, $sent_to_admin, $plain_text, $email) {
if ((get_post_meta($order->id, '_payment_method', true) == 'cod') && (get_post_meta($order->id, '_shipping_method', true) == 'local pickup')){
echo "something1";
}
elseif ((get_post_meta($order->id, '_payment_method', true) == 'bacs') && (get_post_meta($order->id, '_shipping_method', true) == 'local pickup')){
echo "something2";
}
else {
echo "something3";
}}
支付部分工程(我得到正确的“something1”到“something3”的内容),但如果我添加了& &航运条件,我得到“something3”与每种付款方式。
任何想法有什么不对,我怎么能使它工作?
感谢
答
有多个小事改变(如元后付款方式是例如数组):
// (Added this missing hook in your code)
add_action('woocommerce_email_order_details', 'my_completed_order_email_instructions', 10, 4);
function my_completed_order_email_instructions($order, $sent_to_admin, $plain_text, $email) {
// Only for "Customer Completed Order" email notification
if('customer_completed_order' != $email->id) return;
// Comptibility With WC 3.0+
if (method_exists($order, 'get_id')) {
$order_id = $order->get_id();
} else {
$order_id = $order->id;
}
//$order->has_shipping_method('')
$payment_method = get_post_meta($order_id, '_payment_method', true);
$shipping_method_arr = get_post_meta($order_id, '_shipping_method', false); // an array
$method_id = explode(':', $shipping_method_arr[0][0]);
$method_id = $method_id[0]; // We get the slug type method
if ('cod' == $payment_method && 'local_pickup' == $method_id){
echo "something1";
} elseif ('bacs' == $payment_method && 'local_pickup' == $method_id){
echo "something2";
} else {
echo "something3";
}
}
代码放在您的活动子主题的function.php文件(或主题)或任何插件文件。
该代码测试,并与WooCommerce版本2.6.x的和3+
由于工作和跟进的问题:我使用的代码作为自定义插件的一部分,因为我有不同的内容添加到几乎所有类型的客户电子邮件。我列出了插件中的函数,并直接在我的子主题中的相应电子邮件模板中调用它们(我不得不修改模板)。我将代码的相关部分粘贴到插件中,并且它可以正常工作。其他功能仅基于付款方式,而我上面的代码似乎工作至今。我的问题是:是否安全地保留它们或者存在一些“隐藏的陷阱”,我应该根据您的代码更好地修改它们? – Anna
@Anna如果您使用的是WooCommerce 3. +您应该在'get_post_meta()'中使用'$ order-> get_id()'...如果您的代码的某些部分正常工作,请按照原样使用它们... – LoicTheAztec