Cambiar el precio del artículo del carrito en función de los datos del carrito personalizado en WooCommerce

Actualmente, creo un formulario en una sola página del producto para que el cliente pueda ingresar la altura y el ancho del producto. Por lo tanto, el precio del producto varía en función de la altura y el ancho ingresados.

Creé esta forma en

woocommerce-> single-product-> add-to-cart-> simple.php

Antes de la modificación, el formulario es

apply_filters( 'woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ), 'max_value' => apply_filters( 'woocommerce_quantity_input_max', $product->get_max_purchase_quantity(), $product ), 'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( $_POST['quantity'] ) : $product->get_min_purchase_quantity(), ) ); /** * @since 3.0.0. */ do_action( 'woocommerce_after_add_to_cart_quantity' ); ?> <button type="submit" name="add-to-cart" value="get_id() ); ?>" class="single_add_to_cart_button button alt">single_add_to_cart_text() ); ?>

Después de la forma de modificación es

 

width

Height

apply_filters( 'woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ), 'max_value' => apply_filters( 'woocommerce_quantity_input_max', $product->get_max_purchase_quantity(), $product ), 'input_value' => isset( $_POST['quantity'] ) ? wc_stock_amount( $_POST['quantity'] ) : $product->get_min_purchase_quantity(), ) ); /** * @since 3.0.0. */ do_action( 'woocommerce_after_add_to_cart_quantity' ); ?> <button type="submit" name="add-to-cart" value="get_id() ); ?>" class="single_add_to_cart_button button alt">single_add_to_cart_text() ); ?>

Después de esto, utilicé el siguiente código y para probar pupose, establecí el valor en 30. Pero no está funcionando . Lo que me faltaba ?

 add_filter( 'woocommerce_add_cart_item' , 'set_woo_prices'); function set_woo_prices( $woo_data ) { if(isset( $_POST['new-width'])) { $woo_data['new-width'] =$_POST['new-width']; } if(isset( $_POST['new-height'])) { $woo_data['new-height'] =$_POST['new-height']; } if( $_POST['new-width'] !=="" && $_POST['new-height']!=="" ){ $woo_data['data']->set_price( "30" ); } return $woo_data; } 

Por favor aconséjame . Mi objective es cambiar el precio del producto en función del ancho y la altura ingresados ​​por el usuario.

Necesitas usar 2 ganchos diferentes:

  • El primero igual que el tuyo sin tratar de cambiar el precio en él.
  • El segundo en el que cambiarás el precio de tu carrito

El código:

 add_filter( 'woocommerce_add_cart_item', 'add_custom_cart_item_data', 10, 2 ); function add_custom_cart_item_data( $cart_item_data, $cart_item_key ) { if( isset( $_POST['new-width'] ) ) $cart_item_data['new-width'] = $_POST['new-width']; if(isset( $_POST['new-height'] ) ) $cart_item_data['new-height'] = $_POST['new-height']; return $cart_item_data; } add_action( 'woocommerce_before_calculate_totals', 'set_custom_cart_item_price', 10, 1 ); function set_custom_cart_item_price( $wc_cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // First loop to check if product 11 is in cart foreach ( $wc_cart->get_cart() as $cart_item ){ if( ! empty($cart_item['new-width']) && ! empty($cart_item['new-height']) ) $cart_item['data']->set_price( '30' ); } } 

El código va en el archivo function.php de su tema hijo activo (o tema) o también en cualquier archivo de complemento.

Probado y funciona