Proyecto Entradas Woocommerce — Guía completa de configuración WooCommerce

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 superior
  • WooCommerce Mix & Match 2.7 + (contenedores de productos)
  • WooCommerce Min/Max Quantities 5.2 + (límites por ítem)
  • Advanced Product Fields (APF) – botones radio Sí/No
  • Loco 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

  1. Ve a Loco Translate → Plugins → WooCommerce Mix & Match Products.
  2. Crea un nuevo idioma (p. ej. Spanish (ES)) en languages/loco/plugins.
  3. Traduce:
    • You have selected %s items. → “Tienes seleccionado %s entradas.”
    • Repite para cualquier otra cadena necesaria.
  4. Guarda, compila los archivos MO y limpia la caché.

5. Cloudflare y caché

  1. Activa Development Mode (2 h) durante las pruebas.
  2. 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. ✨

Deja una respuesta

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