Cómo funciona
- Un bloque de código personalizado debajo del botón de checkout renderiza la casilla.
- Mientras la casilla está sin marcar, el bloque agrega una clase a los botones de checkout y de pago exprés del carrito a través del shadow root.
- CSS personalizado hace que esa clase deshabilite los clics.
Paso 1: Agrega el bloque de la casilla
props.cart importa: vuelve a aplicar la clase después de que el carrito se re-renderiza, lo que de otro modo la borraría.
Paso 2: Agrega el CSS
pointer-events: none es lo que realmente bloquea el clic; la opacidad solo le muestra al comprador el porqué.
Paso 3: Pruébalo
- El botón de checkout está atenuado y no responde a los clics al cargar.
- Marcar la casilla lo habilita; desmarcarla vuelve a deshabilitar el botón.
- Los botones de pago exprés también están bloqueados.
- Agregar o quitar un artículo no vuelve a habilitar el botón mientras la casilla está sin marcar.
props.cart esté en el arreglo de dependencias.
Registrar quién aceptó
properties[...] directamente del formulario, así que el valor llega al pedido sin importar quién realice el agregado: Aftersell, el tema u otra app.
Una propiedad con el prefijo _ no aparece en la línea visible para el comprador pero sí llega a Shopify, por lo que figura en el pedido. Esto registra qué versión de los términos estaba vigente, no que el comprador marcó la casilla.
Cosas que debes hacer bien
- Apunta solo a las clases
cart-external-*. Las gemelascart-internal-*son la plomería interna del carrito, no un asidero para tu código. Consulta CSS personalizado. - Verifica que
shadowRootexista antes de usarlo. Esundefinedhasta que el carrito arranca. - El bloque no renderiza nada hasta que el carrito carga, así que el botón de checkout nunca está brevemente activo antes de que se aplique el bloqueo.
- Un bloque React que lanza un error no renderiza nada y el resto del carrito sigue funcionando, lo que aquí significa un botón de checkout sin proteger. Prueba en la vista previa antes de publicar.
Adónde ir después
- Bloques de código personalizado: el modo React y sus props.
- CSS personalizado: la convención de clases públicas.
- Events: lo que el evento
checkoutpuede y no puede hacer.