2017-07-03 46 views
3

我试图根据付款方式和送货方式的组合,向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”与每种付款方式。

任何想法有什么不对,我怎么能使它工作?

感谢

回答

2

有多个小事改变(如元后付款方式是例如数组):

// (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+

+0

由于工作和跟进的问题:我使用的代码作为自定义插件的一部分,因为我有不同的内容添加到几乎所有类型的客户电子邮件。我列出了插件中的函数,并直接在我的子主题中的相应电子邮件模板中调用它们(我不得不修改模板)。我将代码的相关部分粘贴到插件中,并且它可以正常工作。其他功能仅基于付款方式,而我上面的代码似乎工作至今。我的问题是:是否安全地保留它们或者存在一些“隐藏的陷阱”,我应该根据您的代码更好地修改它们? – Anna

+0

@Anna如果您使用的是WooCommerce 3. +您应该在'get_post_meta()'中使用'$ order-> get_id()'...如果您的代码的某些部分正常工作,请按照原样使用它们... – LoicTheAztec

相关问题