2017-04-10 9 views
7

私は次の関数を使用して、カート内の製品の価格を変更しようとしています:変更カートのアイテムの価格は3.0

add_action('woocommerce_before_shipping_calculator', 'add_custom_price' 
    ); 
     function add_custom_price($cart_object) { 
     foreach ($cart_object->cart_contents as $key => $value) { 
     $value['data']->price = 400; 
     } 
    } 
それはWooCommerceバージョン2.6.xの中で正しく動作しますが、バージョンにはもう働いていませんでした

3.0+

WooCommerceバージョン3.0以降ではどのように動作させることができますか?

ありがとうございました。 WooCommerceバージョン3.0+

+0

[woocommerce \ _before \ _calculate \ _totalsフックがWC 3.0.1へのアップデート後に動作を停止しました](http://stackoverflow.com/questions/43285252/woocommerce-before-calculate-totals-hook-stopped-作業後更新wc-3-0) –

答えて

14

次のものが必要です。

  • を代わりにwoocommerce_before_calculate_totalsフックを使用するには。
  • ではなく
  • はなくWC_product set_price()方法ここで

を使用するにはWC_Cart get_cart()メソッドを使用するには、コードです:

add_action('woocommerce_before_calculate_totals', 'add_custom_price', 10, 1); 
function add_custom_price($cart_obj) { 

    // This is necessary for WC 3.0+ 
    if (is_admin() && ! defined('DOING_AJAX')) 
     return; 

    foreach ($cart_obj->get_cart() as $key => $value) { 
     $value['data']->set_price(40); 
    } 
} 

コードは、あなたのアクティブな子テーマのfunction.phpファイルになります(またはテーマ)または任意のプラグインファイルでも使用できます。

このコードはテスト済みであり、動作します。 WooCommerceバージョン3.2.6で

+0

ありがとう#LoicTheAztec – Archana

+0

こんにちは、#LoicTheAztecこのソリューションは、ハードコードされた値に対して正しく動作していますが、動的値に対しては機能しません。 – Archana

+0

これらの値をどのように動的にすることができますか? –

0

、LoicTheAztecの答えは、私の作品@私は1000

add_action('woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);

に優先順位を上げる場合、私は中優先1099999の値が、価格との合計を試してみました

私はカートに手数料を追加し、私は3rを使用しています。私は実際に商品の価格を設定していたget_price()と確認できました。製品属性を追加するdパーティープラグインです。私は、これらのWooCommerceの "アドオン"が私のカスタムアクションを遅らせるために必要な遅延を導入すると思う。

+0

私はWC-Fields-Factoryプラグインバージョン2.0.6を使用してカスタム製品属性を追加しています。私は999のプラグインディレクトリを拝借し、プラグインのアクションプライオリティが999である複数のインスタンスを見つけました。私のケースでは、これが私が1000の優先順位を必要としていたことを推測しています。 – Tony

関連する問題