2017-04-07 11 views
4

2.6.14からWC 3.0.1にアップデートしました。次のように
私の元のコードではありません:woocommerce_before_calculate_totalsフックがWC 3.0.1へのアップデート後に動作を停止しました

add_action('woocommerce_before_calculate_totals', 'add_custom_price'); 

function add_custom_price($cart_object) { 
    $custom_price = 10; // This will be your custome price 
    foreach ($cart_object->cart_contents as $key => $value) { 
     $value['data']->price = $custom_price; 
    } 
} 

それはカートやminicartで価格を更新しなくなりました。

+0

'$ product'プロパティに直接アクセスすることはできません。 'WP_DEBUG'を有効にした場合、' debug.log'に警告が表示されます。商品、注文、注文アイテム、およびクーポンオブジェクトのためにセッターとゲッターを使用する必要があります。 – helgatheviking

+0

ありがとうhelgatheviking、 商品の価格を取得して設定する例を教えてください。 –

+1

[ソース](https://github.com/woocommerce/woocommerce/blob/3.0.0/includes/abstracts/abstract-wc-product.php#L804-L806)の 'set_price()'をご覧ください – helgatheviking

答えて

7

最新版のWoocommerce(3.0.1)でカートに設定されている価格をオーバーライドするには、woocommerceでset_price($ price)関数を使用してください。ほとんど変化してSource here

add_action('woocommerce_before_calculate_totals', 'woocommerce_pj_update_price', 99); 

function woocommerce_pj_update_price() { 

    $custom_price = $_COOKIE["donation"]; // This will be your custom price 
    $target_product_id = 413; //Product ID 

    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { 

     if($cart_item['data']->get_id() == $target_product_id){ 

      $cart_item['data']->set_price($custom_price); 
     } 

    } 

} 
+1

私の時間の3時間は、これに対する解決策を探して無駄でした。あなたのおかげで3日間ではありません... –

+1

笑。私は@カロスファリアを助けてうれしい! –

0

作品:私は$値[ 'データ']を設定している場合

//OLD: 
$value['data']->price = $custom_price; 

//NEW: 
$value['data']->set_price($custom_price); 

function add_custom_price($cart_object) { 
    $custom_price = 10; // This will be your custome price 
    foreach ($cart_object->cart_contents as $key => $value) { 
     $value['data']->set_price($custom_price); 
    } 
} 
0
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); 
    } 
} 

- > set_price(40)が正常に動作しますが、:

foreach ($cart_obj->get_cart() as $key => $value) { 
      $price = 50; 
      $value['data']->set_price($price); 
} 
関連する問題