2016-09-19 88 views
1

我試圖讓用戶從他們的我的賬戶面板更新他們訂閱的訂單項。我能夠從訂閱ID獲取訂閱,並向他們顯示更新表單。現在我告訴他們,在他們的訂閱產品項目中,我通過更新WooCommerce訂閱訂單項以編程方式

$subscription = wcs_get_subscription($_GET['subscription']); 
$subscription_items = $subscription->get_items(); 

得到了什麼,我試圖做的是允許用戶更新他們的產品的數量。因此,如果他們更新數量,我想更新訂閱的項目數量,以便將來的訂單以更新的數量生成。 我看到WC_Abstract_Order類中有update_product方法。我認爲這是可以使用的,但我很困惑在這張票據的評論:

* Update a line item for the order. 
* 
* Note this does not update order totals. 

我需要時,我用它來重新計算總額是多少? 另外,當數量爲0時,我需要刪除訂單項。這可能嗎?

由於我沒有看到刪除項目的方法。

感謝

回答

3

所以我是能夠使這項工作做如下。

  1. 從訂閱對象中刪除所有訂單商品。
  2. 通過$ _POST運行以獲取更改數量
  3. 將產品再次添加到訂閱。

注意:我使用自定義字段price_level,因爲它在訂閱期間是動態定價的,我們想要使用它以便價格與訂閱時相同。

//remove product items 
    $subscription->remove_order_items('line_item'); 
    //add product item again 
    foreach($_POST['quantity'] as $product_id => $qty) { 
     if($qty > 0) { 
      //we will need to set dynamic prices based on cusotm field 
      $price_level = get_field('coffee_price_level', $subscription->id); 
      //Get the product 
      $product = wc_get_product($product_id); 
      //set the price 
      $product->set_price(floatval($price_level)); 
      $tax = ($product->get_price_including_tax()-$product->get_price_excluding_tax())*$qty; 
      //subscription item price level 
      $subscription->add_product($product, $qty, array(
       'totals' => array(
        'subtotal'  => $product->get_price(), 
        'subtotal_tax' => $tax, 
        'total'  => $product->get_price(), 
        'tax'   => $tax, 
        'tax_data'  => array('subtotal' => array(1=>$tax), 'total' => array(1=>$tax)) 
       ) 
      )); 
     } 
    } 
+0

嘿@Yalamber,你能夠提供更多的上下文,只要你用來運行這個鉤子?我現在正在做幾乎完全相同的事情,我正在努力想出實現編輯表單的最佳方式。 –

1

通常在woocommerce當付款後產生的訂單(我的意思是結賬=>三江源),你不能再修改訂單的詳細信息。更新數量,刪除/添加項目是WC購物車方法。

對於訂閱插件,每個初始shop_order後期類型都有一個同時生成的初始shop_subscription後期類型和一個計劃後期後期類型(並且後面的ID是相互關聯的)。例如:

Initial (post type) 'shop_order' -> ID is  412 
Initial (post type) 'shop_subscription' -> ID is 413 (and 'post_parent': 412) 
Initial (post type) 'scheduled-action' -> ID is 414 

你可以看到在你的數據庫wp_posts表。

我們可以在wp_postmeta總表與相應的meta_key'_order_total'使用在這種情況下,update_post_meta()功能已經更新了'post_id' => '413'

但是這不會起作用,因爲下一個計劃訂購支付由支付網關(PayPal或其他)處理,並你不能改變的認購額。

當預定的訂閱到期時,WooCommerce只會生成由此支付網關觸發的新訂單。

的唯一方法是取消訂閱,並從一開始就產生一個新的進程......

+0

謝謝你的迴應。當我們查看訂閱時,我看到在後端編輯訂閱產品數量的可能性。那些如何處理?編輯數量時他們是否創建新訂閱? – Yalamber

+0

@Yalamber你不能真的編輯它,因爲你正在改變金額,正如我所說,一旦訂閱已訂閱,WooCommerce不處理定期付款。這是由支付網關或銀行(貝寶或其他人)處理的。即使您更改了woocommerce中的金額,該金額也不會在支付網關或銀行中更新...並且付款將保持與第一次訂單所定義的相同。 – LoicTheAztec

+0

哦,我現在明白了,實際上我不需要更新支付網關上的金額。由於我將限制產品的總量相同,並且每個產品將具有相同的價格。我只需要提供改變不同產品之間數量的能力。 – Yalamber