Buscar
Buscar
Buscar
Cerrar este cuadro de búsqueda.

Calcular cantidad total en la página de producto

Reproducir vídeo

Este es el código que debes copiar y pegar en el archivo functions de tu tema:

// CALCULAR PRECIO TOTAL EN PÁGINAS DE PRODUCTOS
// Agregar el campo del precio total antes de la caja de cantidad en la página de productos
add_action( 'woocommerce_before_add_to_cart_quantity', 'mostrar_precio_total_por_cantidad' );

function mostrar_precio_total_por_cantidad() {
global $product;

// Verificar si es un producto simple o variable
if ( $product && ($product->is_type('simple') || $product->is_type('variable')) ) {
?>
<div class="precio-total-por-cantidad" style="display: none;">
<p>Total: <span class="precio-total"></span></p>
</div>
<?php
}
}

// Actualizar el precio total cuando se cambia la cantidad o la variación
add_action( 'wp_footer', 'actualizar_precio_total_js' );

function actualizar_precio_total_js() {
if ( is_product() ) {
global $product;

?>
<script>
jQuery(document).ready(function($) {
// Función para actualizar el precio total
function actualizarPrecioTotal() {
var cantidad = parseInt($('input.qty').val());
var variation_id = $('input[name="variation_id"]').val();

// Verificar si se han seleccionado al menos 2 unidades o se ha seleccionado una variación en productos variables
if ((cantidad >= 2 || variation_id !== undefined && variation_id !== '') && $('.precio-total-por-cantidad').length > 0) {
var precio_unitario = <?php echo $product->get_price(); ?>;

// Si es un producto variable, obtener precio de la variación seleccionada
if ($('form.variations_form').length > 0) {
var precioVariacion = parseFloat($('.woocommerce-variation-price .price').first().text().replace(/[^\d.,]/g, '').replace(',', '.'));
var precioRebajado = parseFloat($('.woocommerce-variation-regular-price .price').first().text().replace(/[^\d.,]/g, '').replace(',', '.'));

// Si la variación tiene un precio rebajado, usar ese precio en lugar del precio de venta normal
if (!isNaN(precioRebajado) && precioRebajado > 0) {
precio_unitario = precioRebajado;
} else {
precio_unitario = precioVariacion;
}
}

var precio_total = parseFloat(precio_unitario) * parseFloat(cantidad);
var precio_formateado = precio_total.toFixed(2).replace('.', ',') + '€';
$('.precio-total').text(precio_formateado);
$('.precio-total-por-cantidad').show();
} else {
$('.precio-total-por-cantidad').hide();
}
}

// Actualizar el total cuando cambia la cantidad
$('form.cart').on('change', 'input.qty', function(){
actualizarPrecioTotal();
});

// Actualizar el total cuando cambian las opciones de producto variable
$('form.variations_form').on('woocommerce_variation_has_changed', function(){
actualizarPrecioTotal();
});

// Ejecutar la función al cargar la página
actualizarPrecioTotal();
});
</script>
<?php
}
}

 


Este es el código CSS para darle diseño:

/* Sumar precios-cantidades en productos */
.precio-total-por-cantidad {
font-size: 14px;
margin: 15px 0px;
color: rgb(0, 0, 0);
background-color:#ccc;
padding: 15px;
width: fit-content;
}
.precio-total-por-cantidad p{
margin-bottom: 0px !important;
}