En esta guía documentamos, paso a paso, cómo crear un sistema de ventas para entradas, acompañantes y seguros utilizando WooCommerce, Mix & Match, validaciones personalizadas y campos avanzados. Todo el proceso es genérico: basta con sustituir los IDs de producto por los tuyos y funcionará en cualquier tienda.
1. Resumen de la arquitectura
Plugins clave:
WooCommerce
9.8 o superiorWooCommerce Mix & Match
2.7 + (contenedores de productos)WooCommerce Min/Max Quantities
5.2 + (límites por ítem)Advanced Product Fields
(APF) – botones radio Sí/NoLoco Translate
– traducción de cadenas
2. Implementación base
Reglas funcionales
- Debe adquirirse al menos 1 entrada.
- Máximo 5 acompañantes en total.
- No puede haber más acompañantes que entradas.
Validación en el servidor (PHP)
Coloca este snippet con el plugin Code Snippets. Sustituye los arrays $IDS_ENTRADA
y $IDS_ACOMP
por los IDs reales de tus productos.
add_action( 'woocommerce_check_cart_items', 'mi_validacion_mix_and_match' );
function mi_validacion_mix_and_match() {
// ⇩⇩⇩ REEMPLAZA con tus propios IDs ⇩⇩⇩
$IDS_ENTRADA = [ 1234, 5678 ]; // Productos “entrada”
$IDS_ACOMP = [ 9012, 3456 ]; // Productos “acompañante”
// ⇧⇧⇧ REEMPLAZA con tus propios IDs ⇧⇧⇧
$entradas = $acomps = 0;
foreach ( WC()->cart->get_cart() as $item ) {
$id = $item['product_id'];
$qty = $item['quantity'];
if ( in_array( $id, $IDS_ENTRADA ) ) $entradas += $qty;
if ( in_array( $id, $IDS_ACOMP ) ) $acomps += $qty;
}
if ( $entradas === 0 || $acomps > $entradas || $acomps > 5 ) {
wc_add_notice( '❌ Comprueba la cantidad de acompañantes y entradas.', 'error' );
}
}
Validación instantánea (JavaScript)
<script>
document.addEventListener('DOMContentLoaded', () => {
const form = document.querySelector('form.cart');
if (!form) return;
form.addEventListener('submit', e => {
const rows = [...form.querySelectorAll('tr.mnm_item')];
let ent = 0, acomp = 0;
rows.forEach(row => {
const title = row.querySelector('.woocommerce-loop-product__title')?.textContent.toLowerCase();
const qty = parseInt(row.querySelector('input.mnm-quantity')?.value) || 0;
if (title?.includes('entrada')) ent += qty;
if (title?.includes('acompañante')) acomp += qty;
});
if (ent === 0 || acomp > ent || acomp > 5) {
e.preventDefault();
alert('❌ Revisa tu selección.');
location.reload();
}
});
});
</script>
3. Seguro opcional
Campo radio con APF
Ajuste | Valor |
---|---|
Type | Radio buttons |
Label | ¿Deseas seguro para tus entradas? |
Name / Key | seguro_si_no |
Opciones | Sí (yes ) / No (no , predeterminado) |
Snippet que añade el seguro (PHP)
De nuevo, sustituye los IDs de ejemplo por los tuyos.
add_filter( 'woocommerce_add_to_cart_validation', function( $ok, $pid ) {
// ⇩⇩⇩ REEMPLAZA con tus propios IDs ⇩⇩⇩
$ID_CONTENEDOR = 8000; // ID del Mix & Match
$ID_SEGURO_VAR = 8001; // Variación “Seguro”
$IDS_ENTRADA_HIJ = [ 8002, 8003 ]; // Hijos que cuentan como entrada
// ⇧⇧⇧ REEMPLAZA con tus propios IDs ⇧⇧⇧
if ( $pid !== $ID_CONTENEDOR ) return $ok;
// Total de entradas elegidas
$q = $_POST['mnm_quantity'] ?? [];
$entradas = array_sum( array_intersect_key( $q, array_flip( $IDS_ENTRADA_HIJ ) ) );
$agregarSeg = ( $_POST['seguro_si_no'] ?? 'no' ) === 'yes';
// Copiamos la cantidad de entradas al “Seguro” o lo ponemos a 0
$_POST['mnm_quantity'][ $ID_SEGURO_VAR ] = $agregarSeg ? $entradas : 0;
return $ok;
}, 10, 2 );
4. Traducciones con Loco Translate
- Ve a Loco Translate → Plugins → WooCommerce Mix & Match Products.
- Crea un nuevo idioma (p. ej.
Spanish (ES)
) enlanguages/loco/plugins
. - Traduce:
You have selected %s items.
→ “Tienes seleccionado %s entradas.”- Repite para cualquier otra cadena necesaria.
- Guarda, compila los archivos MO y limpia la caché.
5. Cloudflare y caché
- Activa Development Mode (2 h) durante las pruebas.
- Vacía la caché cada vez que subas snippets o actualices traducciones.
6. Preguntas frecuentes
- No se añade el seguro: confirma que usas el ID de variación, no el ID padre.
- El radio no aparece: revisa la regla de visibilidad en el grupo de campos APF.
- La traducción no cambia: asegúrate de compilar los archivos MO y purgar caché.
¡Listo! Tu tienda ya gestiona entradas, acompañantes y seguros con reglas de negocio claras y totalmente adaptables a cualquier proyecto. ✨