Изменение количества Woocommerce корзины прекратить изменять окончательную цену - PullRequest
0 голосов
/ 02 мая 2020

По умолчанию при изменении количества в корзине woocommerce она обновляет цену товара, умножая ее на количество. Я хотел бы изменить поведение по умолчанию и убедиться, что когда в корзине при изменении количества она не меняет цену по умолчанию, пройденную при нажатии на кнопку добавления в корзину

Я добавил этот хук действия, но не могу понять как остановить изменение цены при изменении количества в корзине.

   add_action( 'woocommerce_after_cart_item_quantity_update', 'on_quantity_changed_in_cart', 20, 4 );

   function on_quantity_changed_in_cart( $cart_item_key, $quantity, $old_quantity, $cart){
     if( ! is_cart() ) return; // Only on cart page

     //here stop price from been changed by default
  }

1 Ответ

0 голосов
/ 02 мая 2020

Глядя на ответ " Отключить калькуляцию количества товаров в корзине Woocommerce ", я обнаружил, что мне нужно переопределить хук действия, чтобы заменить окончательную стоимость в строке:

  add_filter('woocommerce_cart_product_subtotal', [$this, 'filter_woocommerce_cart_product_subtotal'], 10, 4);

  public function filter_woocommerce_cart_product_subtotal($product_subtotal, $product, $quantity, $cart){
        $sub_value = 0;
        foreach ($cart->cart_contents as $hash => $value) {
            if ($value["product_id"] === wc_get_product($product)->get_id()) {
                $sub_value =  $value["wcform-custom_price"];

                 //wcform-custom_price is passed from when adding to the cart.
            }
        };

        return wc_price($sub_value);
  }

Теперь по сумме я переопределяю следующее

 add_action( 'woocommerce_calculate_totals', [$this,'custom_item_price'],20,1);

 add_filter( 'woocommerce_calculated_total', [$this,"calculateFinalTotal"], 20, 2 );


   public function custom_item_price( $wc_cart ) {
        $cart_contents_total = 0;

        foreach ( $wc_cart->get_cart() as $cart_item_key => $cart_item ){
            $cart_contents_total += $cart_item["wcform-custom_price"];
        }

        $wc_cart->subtotal = $cart_contents_total;
    }



   public function calculateFinalTotal($total,$cart){
        $cart_contents_total = 0;
        foreach ( $cart->get_cart() as $cart_item_key => $cart_item ){
            $cart_contents_total += $cart_item["wcform-custom_price"];
        }
        return   $cart_contents_total;;///print_r($cart->get_cart());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...