2016-09-19 9 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の場合に広告申込情報を削除する必要がありましたか?

私はアイテムの削除方法は表示されません。

おかげ注文が支払い後に生成されるwoocommerceで

通常

答えて

3

は、だから私は、次のことをやって、この作品を作ることができました。

  1. サブスクリプションオブジェクトからすべてのオーダーアイテムを削除します。
  2. 変更された数量を得るために$ _POSTを実行してください
  3. 購読に再度商品を追加してください。

注:それは動的サブスクリプションの際に価格とその価格は、彼らが加入したときと同じであったので、我々はそれを使用したいたように私は、カスタムフィールドの値段レベルを使用しています。

//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

は(私はチェックアウトを意味する=>ありがとう)、あなたはもう注文の詳細を編集することはできません。数量の更新、アイテムの削除/追加は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テーブルにそれを見ることができます。

私たちは、この場合にはupdate_post_meta()機能を使用して対応するmeta_key'_order_total''post_id' => '413'ためwp_postmetaテーブルに合計を更新した可能性があります。

が、次のスケジュールされたサブスクリプションの支払いは支払いゲートウェイ(ペイパル等)によって処理され、あなたがそのサブスクリプションの任意の金額を変更することはできませんので、これは、動作しません。

WooCommerceは、予定された定期購読期限が到来すると、この支払いゲートウェイによってトリガーされた新しい注文を生成するだけです。

唯一の方法は、サブスクリプションをキャンセルして最初から新しいプロセスを生成することです...

+0

ありがとうございました。サブスクリプションを見ると、バックエンドでサブスクリプション製品数量を編集する可能性があることがわかります。それらはどのように処理されますか?数量を編集するときに新しいサブスクリプションを作成しますか? – Yalamber

+0

@ Yalamberあなたは金額を変更しているので、実際にはそれを編集することはできません。私が言ったように、サブスクリプションが購読されると、WooCommerceは予定された支払いを処理していません。これは、支払いゲートウェイまたは銀行(paypalなど)によって処理されます。 woocommerceで金額を変更しても、それは決済ゲートウェイや銀行で更新されません...支払いは最初の注文で定義されたのと同じままです。 – LoicTheAztec

+0

ああ、私は今それを得ました、私は実際に支払ゲートウェイの金額を更新する必要はありません。私は製品の総量を同じに制限し、各製品は同じ価格を持つことになるので。私は、異なる製品間の数量を変更する能力を提供する必要があります。 – Yalamber

関連する問題