2017-08-28 10 views
1

woocommerceとExtra Product Optionsプラグインを使用して非常に特定のタイプのeショップを作成していますが、製品の重量に問題があります。選択した属性に応じて、運行なしで、カート内の各製品の重量を変更したいと考えています()。私はこれを使って体重を変えずに成功します。WooCommerceの配送コストを更新するために各カートアイテムの重量を変更します

add_action('woocommerce_before_calculate_totals', 'add_custom_weight', 10, 1); 
function add_custom_weight(WC_Cart $cart) { 
    if (sizeof($cart->cart_contents) > 0) { 
     foreach ($cart->cart_contents as $cart_item_key => $values) { 
      $_product = $values['data']; 

      //very simplified example - every item in cart will be 100 kg 
      $values['data']->weight = '100'; 
     } 
    } 
    var_dump($cart->cart_contents_weight); 
} 

のvar_dumpは、カートの重量を返す変更されていない(それは私の変更前の0.5だった場合、それは0.5のままになります)、そしてもちろん(重量に基づく)輸送費は変更されないまま。何か案は?

答えて

2

WooCommerce 3+ので、あなたはWC_ProductオブジェクトにWC_Productメソッドを使用する必要があります。ここではそれを行うための機能的な方法は次のとおりです。

add_action('woocommerce_before_calculate_totals', 'add_custom_weight', 10, 1); 
function add_custom_weight($cart_object) { 

    if ((is_admin() && ! defined('DOING_AJAX')) || $cart_object->is_empty()) 
     return; 

    foreach ($cart_object->get_cart() as $cart_item) { 
     //very simplified example - every item in cart will be 100 kg 
     $cart_item['data']->set_weight(100); 
    } 
    // Testing: cart weight output 
    echo '<pre>Cart weight: '; print_r($cart_object->get_cart_contents_weight()); echo '</pre><br>'; 
} 

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

このコードはテスト済みであり、動作します。

関連する問題