Oferta SiteGround Black Friday

Añadir selector de cantidades al finalizar compra en WooCommerce

El selector de cantidades de producto suele estar solo disponible en la página del producto y en el carrito pero ¿y si quieres también ofrecer al cliente que cambie la cantidad de unidades en la página de pago?

Hay múltiples motivos por los que querrías añadir esta funcionalidad a tu tienda online, como por ejemplo si has creado una redirección para que los clientes no pasen por el carrito y vayan directamente al pago, o simplemente porque quieres ofrecer una total flexibilidad para añadir o quitar cantidades de los productos en cualquier momento, tú sabrás.

El caso es que es muy fácil, solo hay que añadir algo de código a tu plugin de personalizaciones o al archivo functions.php del tema activo, así:

/* Selector de cantidades al finalizar compra en Woo */
// Ocultamos la cadena de las cantidades junto al nombre del producto
add_filter( 'woocommerce_checkout_cart_item_quantity', '__return_empty_string' );
// Agregamos el selector de cantidades
add_filter( 'woocommerce_cart_item_subtotal', 'ayudawp_selector_cantidades_pago', 9999, 3 );
function ayudawp_selector_cantidades_pago( $product_quantity, $cart_item, $cart_item_key ) {
if ( is_checkout() ) {
$product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
$product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); 
$product_quantity = woocommerce_quantity_input( array(
'input_name' => 'shipping_method_qty_' . $product_id,
'input_value' => $cart_item['quantity'],
'max_value' => $product->get_max_purchase_quantity(),
'min_value' => '0',
), $product, false );
$product_quantity .= '<input type="hidden" name="product_key_' . $product_id . '" value="' . $cart_item_key . '">';
}
return $product_quantity;
}
// Detectamos el cambio de cantidad para recalcular los totales
add_action( 'woocommerce_checkout_update_order_review', 'ayudawp_recalcular_totales_selector_cantidades_pago' );
function ayudawp_recalcular_totales_selector_cantidades_pago( $post_data ) {
parse_str( $post_data, $post_data_array );
$updated_qty = false;
foreach ( $post_data_array as $key => $value ) { 
if ( substr( $key, 0, 20 ) === 'shipping_method_qty_' ) { 
$id = substr( $key, 20 ); 
WC()->cart->set_quantity( $post_data_array['product_key_' . $id], $post_data_array[$key], false );
$updated_qty = true;
} 
} 
if ( $updated_qty ) WC()->cart->calculate_totals();
}

Guarda los cambios y pasarás de esto…

A esto otro…

¿A que es una opción muy interesante?

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 9

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

Sobre el autor

4 comentarios en “Añadir selector de cantidades al finalizar compra en WooCommerce”

    1. jaja, se coló el Antonio Orozco por ahí 😀

      Siempre escribo con música pero hago las capturas de vídeo sin sonido, aquí se me olvidó quitarlo. No hay mal que por bien no venga ¿no? 😉

  1. Muy bueno el articulo, muchas gracias! Tengo una duda diferentes, como podría añadir una celda como ID Fiscal en formulario de checkout solo con código?

  2. Hola Fernando, me ha gustado mucho este artículo.
    Lo he probado porque me parece muy útil pero …… cuando añades productos va fenomenal, lo añade y refresca la página pero, cuando sin querer bajas el número de productos y lo dejas a 0, se queda pensando sin refrescar la página hasta que no la refresco manualmente, entonces lo hace correctamente y quita ese producto.
    ¿Alguna solución? Por ahora lo he quitado.
    Trabajo con Divi.
    Gracias por tu trabajo!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
- Responsable: Fernando Tellado ([email protected])
- Fin del tratamiento: Moderación de comentarios para evitar spam
- Legitimación: Tu consentimiento
- Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
- Derechos: Acceso, rectificación, portabilidad, olvido

 

Ir arriba