簡體   English   中英

在購買時檢索 woocommerce 父訂單?

[英]Retrieving a woocommerce parent order on purchase?

希望有人可以幫助解決這個問題。 這似乎是一個簡單的問題,但想知道是否有更簡潔的方法來做到這一點。

現在我有一個掛鈎,它會在 WooCommerce 訂單完成和更新訂單時運行。 該鈎子如下:

add_action('save_post_shop_order', 'printout', 10, 3);

function printout($post_ID, $post, $update)
{

    $posttype = get_post_type($post_id);
    write_to_log('Post Type:' . $posttype);

    if (!is_admin()){
        return;
    }

    if($update && get_post_type($post_id) === "shop_order"){
        $msg = $post_ID;
        $order = get_woocommerce_order($msg);
        mainplugin($msg, $order);
    }

}


add_action('woocommerce_thankyou', 'neworder_created', 10, 2);


function neworder_created($order_id){
    $order = get_woocommerce_order($order_id);

    mainplugin($order_id, $order);
}

在訂單更新時運行插件的掛鈎非常完美。 你會注意到我在那里有一些驗證邏輯:

if($update && get_post_type($post_id) === "shop_order"){
        $msg = $post_ID;
        $order = get_woocommerce_order($msg);
        mainplugin($msg, $order);
    }

這本質上是我試圖為新訂單復制的功能。 當人們在我的網站上購買時,會發生以下情況:按創建順序使用以下帖子類型進行 4 次數據庫調用:

  • wc_booking(孩子)
  • shop_order(父級)
  • wcdp_payment(孩子)
  • wcdp_payment(孩子)

發生的事情是新訂單的鈎子

add_action('woocommerce_thankyou', 'neworder_created', 10, 2);

在 wcdp_payment 的最后一次數據庫調用上運行,而不是我需要的; 它應該只在那個 shop_order 數據庫條目上運行(或者我猜父訂單是我需要的) wcdp_payment 缺少訂單信息。

當帖子類型只有 shop_order 時,有沒有辦法讓它運行? 我知道我可以連接一些類似於我設置它來處理更新的邏輯,但我擔心的是我不知道這個掛鈎到底在做什么,所以它是否會到達所需的“shop_order”數據庫條目? 或者我應該使用不同的鈎子嗎?

謝謝您的幫助。 希望這是有道理的。

你好,親愛的互聯網上的陌生人。 我問了電腦,結果是這樣的:


add_action( 'save_post', 'retrieve_parent_order_on_purchase', 10, 3 );

function retrieve_parent_order_on_purchase( $post_id, $post, $update ) {
    if ( $post->post_type == 'shop_order' && ! $update ) {
        $parent_order = wc_get_order( $post_id );
        // do something with $parent_order
    }
}

我不知道這是否有效,但也許它可以幫助? 我很好奇它是否有效,如果它沒有讓我知道,那么我可以刪除這個答案。

不清楚這 4 個 db 調用是什么意思

  • wc_booking(兒童)
  • shop_order(父)
  • wcdp_payment(孩子)
  • wcdp_payment(孩子)

購買 如果您的意思是希望在創建訂單並將其保存在數據庫中后調用函數neworder_created ,則可以使用此鈎子woocommerce_checkout_order_created而不是woocommerce_thankyou鈎子。

應該是這樣的。

add_action('woocommerce_checkout_order_created', 'neworder_created', 10, 1);

該鈎子已經傳遞了訂單對象,因此您需要將函數更改為。

function neworder_created($order){
    $order_id = $order->get_id();
    mainplugin($order_id, $order);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM