2017-11-30 9 views
2

WooCommerceでは、私はwoocommerce_thankyouアクションフックに引っ掛けられたカスタム関数を使用して、支払いが行われた後にいくつかのコードを実行しています。フックは機能しますが、私は注文を得ることができないようです。フックwoocommerce_thankyouは注文を受け取りません

これは簡略化されたコードです。外見では$orderが見つかりません:

add_action('woocommerce_thankyou', 'afterorder', 10, 1); 


function afterorder($order_id) { 
    //$order = new WC_Order($order_id); 
    $order = wc_get_order($order_id); 
    $order_items = $order->get_items(); 
    $order_comment_list = explode('\n', $order->customer_message); 
    $payment_method = $order->payment_method_title; 

    foreach($order_items as $product) { 
     $order->add_order_note('order for '.$product['name'].' received', false); 
    } 
} 

私はここで何が欠けていますか?

答えて

1

コードは部分的に古く、WooCommerce 3以降でいくつかのエラーがあります。注文明細は今やWC_Order_Item_Productのクラスオブジェクトです。

add_action('woocommerce_thankyou', 'afterorder', 10, 1); 
function afterorder($order_id) { 
    // The WC_Order object 
    $order = wc_get_order($order_id); 

    $order_comment_list = explode('\n', $order->get_customer_note()); // Changed 

    $payment_method = $order->get_payment_method_title(); // Changed 

    foreach($order->get_items() as $line_item) { 
     // The WC_Product object 
     $product = $line_item->get_product(); // Added 
     $note = 'order for '.$product->get_title().' received';// Changed 
     $order->add_order_note($note, false); 
    } 
} 

コードは、あなたのアクティブな子のfunction.phpファイルに行く:

は注文「ラインアイテム」のためには、対応する製品のタイトルのように、関連するデータを取得するためにWC_Order_Item_Product利用可能な方法を使用する必要がありますテーマ(またはアクティブなテーマ)またはプラグインファイルに保存されます。

WC_Orderの方法add_order_note()が正しく設定されているかどうかを確認する必要があります。

+0

ニース!優れた答え。 add_action( 'woocommerce_thankyou'、 'afterorder') '... –

+0

@cale_b @cale_bコーディングは次のようになります。多くの理由から、優先順位とargの数を設定する方が良いです。厳密な変数宣言のようなものです...しかし、あなたはどちらも正しいです。ありがとう:) – LoicTheAztec

関連する問題