WooCommerce add_to_cart() con precio personalizado

2 nov 2017, 23:45:16
Vistas: 20.4K
Votos: 3

Estoy usando este método en combinación con una llamada ajax para añadir un producto desde un configurador a mi carrito:

$woocommerce->cart->add_to_cart($p_id, $p_quantity, $p_var_id, $p_var_name);

¿Cómo puedo usar este método para establecer un precio personalizado calculado? ¿Es posible?

Saludos,

Marvin

1
Comentarios

Intenté la semana pasada pero no pude. Voy a seguir esta pregunta.

sakarya sakarya
3 nov 2017 00:23:04
Todas las respuestas a la pregunta 1
4
12

Actualmente no hay una forma directa de agregar un precio personalizado a un producto que se añade a través de la función $woocommerce->cart->add_to_cart (Documentación), pero tenemos una solución alternativa que explico en el código a continuación:

global $woocommerce;
$custom_price = 1000;
// Datos del artículo del carrito para enviar y guardar en el pedido
$cart_item_data = array('custom_price' => $custom_price);   
// Función de woocommerce para agregar producto al carrito, revisa su documentación
// Lo que necesitamos aquí es solo $product_id & $cart_item_data, otros pueden ser por defecto.
$woocommerce->cart->add_to_cart( $product_id, $quantity, $variation_id, $variation, $cart_item_data );
// Calcular totales
$woocommerce->cart->calculate_totals();
// Guardar carrito en la sesión
$woocommerce->cart->set_session();
// Opcional: Establecer cookies del carrito
$woocommerce->cart->maybe_set_cart_cookies();

En tu archivo de funciones puedes colocar el siguiente código:

function woocommerce_custom_price_to_cart_item( $cart_object ) {  
    if( !WC()->session->__isset( "reload_checkout" )) {
        foreach ( $cart_object->cart_contents as $key => $value ) {
            if( isset( $value["custom_price"] ) ) {
                // Para versiones de woocommerce menores a 3
                //$value['data']->price = $value["custom_price"];
                // Para versiones de woocommerce 3+
                $value['data']->set_price($value["custom_price"]);
            }
        }  
    }  
}
add_action( 'woocommerce_before_calculate_totals', 'woocommerce_custom_price_to_cart_item', 99 );

Y listo, ya puedes continuar.

30 ene 2018 14:38:43
Comentarios

¡Excelente! Resolvió mi problema. Gracias

Zaheer Abbas Zaheer Abbas
9 jul 2020 15:14:31

¿y cómo mostrar cart_item_data en la página del carrito? ¿así como en el correo del pedido y la página del historial de pedidos?

Rahul Shinde Rahul Shinde
3 sept 2020 15:03:00

Al implementar el código anterior funciona para el precio personalizado pero para otros productos establece el precio a 0. ¿Tienes alguna idea?

David Coder David Coder
4 abr 2024 11:11:46