2014-10-31 77 views
1

我創建一個WordPress和WooCommerce插件,它具有以下功能:更新woocommerce秩序,而不是創建一個新的

  1. 匿名用戶定製產品的頁面
  2. 上。在PHP腳本在此過程中,它會在數據庫中創建訂單
  3. 用戶轉到請求客戶數據,交貨等的結賬頁面。

通過點擊「立即購買」 WooCommerce在系統中創建一個新的秩序和我要的是更新在個性化過程早期創建的訂單,增加客戶的詳細信息,付款,發貨等來了訂購。

這可能嗎?

謝謝!

回答

0

您可以使用函數wc_update_order()來獲取現有的訂單對象。

$order_id = $_GET[ 'order_id' ] 
$order = wc_update_order(array ('order_id' => $order_id)); 

// now you got the woocommerce order object and you can execute many functions 
// 
$address = array(
     'first_name' => 'Fresher', 
     'last_name' => 'StAcK OvErFloW', 
     'company' => 'stackoverflow', 
     'email'  => '[email protected]', 
     'phone'  => '777-777-777-777', 
     'address_1' => '31 Main Street', 
     'address_2' => '', 
     'city'  => 'Chennai', 
     'state'  => 'TN', 
     'postcode' => '12345', 
     'country' => 'IN' 
    ); 

$order->add_product(get_product('12'), 1); //(get_product with id and next is for quantity) 
$order->set_address($address, 'billing'); 
$order->set_address($address, 'shipping'); 
$order->calculate_totals(); 

對於所有你可以在命令對象調用,以後你執行下面的代碼獲取您的訂單

var_dump(get_class_methods($order)); 

這將列出所有可用的功能功能的完整列表Woocommerce Order對象。

希望這回答你的問題

+1

非常感謝您的幫助。儘管如此,案件更爲特殊。在此過程中,用戶可以訪問標準的WooCommerce結賬頁面,該頁面將加載form-checkout.php模板。 在此腳本中,有幾個「do_action」調用,並且加載了新用戶,新送貨地址,付款方式,送貨單和結束按鈕。 我不知道如何做,一旦用戶按下該按鈕,WooCommerce的「class-wc-checkout.php」類的「create_order」功能將運行訂單更新,而不是創建一個新的。 – 2014-11-06 10:15:37

0

最後的解決方案是,一旦訂單在「thankyou.php」 WooCommerce頁面進行了更新值。

更新如下:

$item = $order->get_items('line_item'); 
$data = (array) WC()->session->get('_lm_product_data'); 

wc_update_order_item_meta(key($item), __('Name', 'hpwallart'), $data['_name']); 
wc_update_order_item_meta(key($item), __('Width', 'hpwallart'), $data['_width']); 
wc_update_order_item_meta(key($item), __('Height', 'hpwallart'), $data['_height']); 

此前,在這個過程中的一步,我已經保存在session變量「_lm_product_data」信息感興趣我的最後一步。

0

嗨Jorge我知道它有點晚,但我認爲這將滿足您的需求比您的解決方案稍好一點。其實這是根據woocommerce做到這一點的推薦方式。即使他們由於某種原因未達到「謝謝」模板,它也會起作用。 (例如,沒有完成付款流程)

在我的情況下,我必須這樣做才能添加我的客戶需要的附加信息,對於該特定購買,所以我決定將其附加到訂單元。

基本上,您必須將您的自定義函數附加到創建訂單時執行的掛鉤。這是使用該插件已經提供這樣你就可以創造秩序的過程中做你自己的事情掛鉤的的exaple:

/** 
* Update the order meta with field value 
*/ 
add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta'); 

function my_custom_checkout_field_update_order_meta($order_id) { 
    if (! empty($_POST['my_field_name'])) { 
     update_post_meta($order_id, 'My Field', sanitize_text_field($_POST['my_field_name'])); 
    } 
} 

來源:http://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/

在這個例子中,他們都增加一個額外的自定義字段(可以根據需要購買產品),但這部分代碼可以用於您的情況,只需將您的定製產品信息傳遞給結帳表單子目錄(一個選項可以添加隱藏的輸入與樣式=「顯示:無」通過JavaScript或在eplugin提供的PHP模板)。

相關問題