2017-07-03 89 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

相關問題