2017-07-03 1 views
3

Je suis en train d'ajouter un contenu différent pour woocommerce complété les notifications par e-mail basées sur des combinaisons de méthodes de paiement et méthode d'expédition.WooCommerce ajouter un contenu e-mail personnalisé basé sur la méthode de paiement et la méthode d'expédition

Mon code à ce jour:

// 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"; 
}} 

Les travaux de pièce de paiement (je reçois le droit « something1 » à contenu « de something3 ») mais si j'ajoute la & & condition d'expédition, je reçois « something3 » avec chaque méthode de paiement.

Une idée de ce qui ne va pas et comment pourrais-je le faire fonctionner?

Merci

Répondre

2

Il y a plusieurs petites choses à changer (comme après la méthode meta paiement est un tableau par exemple):

// (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"; 
    } 
} 

Code va dans le fichier function.php de votre thème enfant actif (ou thème) ou aussi dans n'importe quel fichier plugin.

Ce code est testé et fonctionne avec la version 2.6.x et WooCommerce 3+

+0

Merci et question de suivi: J'utilise le code dans le cadre d'un plugin personnalisé parce que je dois ajouter un contenu différent à presque tous les types de l'email du client. Je liste les fonctions dans le plugin et je les appelle dans les modèles d'e-mails respectifs dans mon thème enfant directement (j'ai dû modifier les modèles de toute façon). J'ai collé la partie appropriée de votre code au plugin et cela fonctionne. Les autres fonctions sont basées seulement sur la méthode de paiement, et mon code ci-dessus a semblé fonctionner jusqu'ici. Ma question est la suivante: est-il sécuritaire de les laisser tels quels ou y at-il des «pièges cachés», et je devrais mieux les modifier en fonction de votre code? – Anna

+0

@Anna Si vous utilisez WooCommerce 3. + vous devriez utiliser '$ order-> get_id()' à la place dans 'get_post_meta()' ... Si une partie de votre code fonctionne, utilisez-les comme ils sont ... – LoicTheAztec