2017-04-14 1 views
1

J'essaie de m'envoyer un e-mail après chaque commande passée. Le problème que j'ai est que $order->get_total() ainsi que get_total_tax retourner au lieu de la valeur totale réelle de la commande.Récupérer des données de commande dans le nouvel ordre hook

add_action('woocommerce_new_order', 'custom_after_order_created_hook', 12 , 1); 
function custom_after_order_created_hook($order_id) { 
    $order = new WC_Order($order_id); 

    $with_tax = $order->get_total(); 
    $tax = $order->get_total_tax(); 
    $without_tax = $with_tax - $tax; 

    $to = "[email protected]"; 
    $subject = "New order"; 
    $content = " 
    New order {$order->id} 
    With tax: {$with_tax} 
    Without tax: {$without_tax} 
    Tax: {$tax} 
    "; 

    $status = wp_mail($to, $subject, $content); 
} 

Chaque valeur en plus order_id $ et $order->id obtient évalué à 0. order_id de $ a une valeur appropriée. Ce problème se produit uniquement lorsque vous utilisez le crochet woocommerce_new_order (j'ai également essayé de l'utiliser sur une page personnalisée - fonctionne correctement), ce qui me fait réfléchir.

Je ne sais pas quel est le problème ici, y a-t-il une partie de mon code asynchrone?
Ou peut-être que ce crochet est appelé avant que la commande ne soit mise à jour avec le prix payé/information fiscale?
Que dois-je faire pour obtenir des informations de prix ici?

Merci.

+0

quelle verion de WC? –

Répondre

2

Ce hook d'action woocommerce_new_order est utilisé pour modifier la fonction create_order(). Donc, il vaut mieux utiliser le crochet d'action woocommerce_thankyou qui déclenchera votre notification par courrier électronique personnalisé lors de la commande a été créé:

// Tested on WooCommerce versions 2.6+ and 3.0+ 
add_action('woocommerce_thankyou', 'new_order_custom_email_notification', 1, 1); 
function new_order_custom_email_notification($order_id) { 
    if (! $order_id) return; 

    // Getting an instance of WC_Order object 
    $order = wc_get_order($order_id); 

    $with_tax = $order->get_total(); 
    $tax = $order->get_total_tax(); 
    $without_tax = $with_tax - $tax; 

    $to = "[email protected]"; 
    $subject = "New order"; 
    $content = " 
    New order {$order_id} 
    With tax: {$with_tax} 
    Without tax: {$without_tax} 
    Tax: {$tax} 
    "; 

    wp_mail($to, $subject, $content); 
} 

du code dans le fichier function.php de votre thème enfant actif (ou le thème) ou encore dans un plug-in fichier.

Le code a été testé et fonctionne.

Utiliser crochet d'action woocommerce_checkout_order_processed au lieu de crochet d'action woocommerce_thankyou est aussi une bonne alternative, peut être encore mieux. Il suffit de remplacer:

add_action('woocommerce_thankyou', 'new_order_custom_email_notification', 1, 1); 

Par:

add_action('woocommerce_checkout_order_processed', 'new_order_custom_email_notification', 1, 1); 

Réponse de travail similaires: Woocommerce - How to send custom emails based on payment type


Le crochet woocommerce_checkout_order_processed (situé dans WC_Checkout process_checkout() méthode qui pourrait être pratique aussi à cet effet.

Le code source de la méthode WC_Checkout process_checkout() est intéressante pour obtenir une vue sur l'achat flux.

+0

merci, c'est ce que je soupçonnais. Est-ce que vous savez par hasard si tout le flux d'achat est documenté quelque part? Les documents officiels ne sont pas très utiles jusqu'à présent. – mymlyn

+0

@mymlyn J'ai mis une mise à jour sur la réponse concernant le flux d'achat dans WooCommerce (à la fin). J'espère que cela vous aidera Vous pouvez donc utiliser woocommerce_checkout_order_processed – LoicTheAztec