Persistencia del carrito y de los pedidos

Las selecciones de complementos de producto permanecen vinculadas a su línea exacta del carrito de WooCommerce. Esta guía está dirigida a propietarios de tiendas que necesitan entender los cambios de cantidad, las sesiones restauradas, los pedidos completados y Order again, así como a desarrolladores que usan la Store API de WooCommerce.

Antes de empezar

  • Activa Product Add-Ons en Settings → POM Tweaks → E-Commerce → Products.
  • Crea y asigna al menos un grupo habilitado.
  • Prueba la ruta completa desde la página de producto hasta el carrito y el pago en un sitio de staging antes de asignar campos obligatorios en un catálogo en producción.

Comportamiento del carrito y de la sesión

Las selecciones con valores diferentes crean configuraciones de carrito distintas. Recargar la página o volver con la misma sesión de WooCommerce restaura cada valor aceptado y recalcula su precio a partir de la configuración actual del producto, del grupo, del campo y de la opción reutilizable.

Los campos de texto largo con Rich text editor habilitado conservan su HTML permitido en el carrito, en el formulario de producto reabierto y en los metadatos de la línea del pedido. El formato se filtra de nuevo cuando estos valores se restauran o se muestran. Los demás campos de texto siguen almacenando texto plano. Consulta Let customers enter formatted text para habilitar el editor.

Cuando un invitado inicia sesión, WooCommerce migra el carrito a la sesión del cliente y POM transfiere la propiedad solo de las subidas privadas a las que hace referencia exactamente ese carrito. Por tanto, la misma línea configurada puede continuar hasta el pago sin exponer el archivo a otro navegador o cuenta.

Los cambios de cantidad preservan el tipo de precio configurado:

  • Una tarifa plana se cobra una vez por la línea completa del carrito.
  • Un importe por cantidad se cobra por cada unidad.
  • Un importe porcentual se recalcula a partir del precio unitario base actual por cada unidad.

La instantánea aceptada del carrito almacena importes decimales canónicos en lugar de resultados binarios de coma flotante sin límites. WooCommerce recibe los precios normalizados con su precisión interna de cálculo y, a continuación, aplica sus reglas normales de cupones e impuestos. Los totales de línea del pedido completado usan los decimales de la divisa activa, mientras que los metadatos de compatibilidad y la instantánea POM guardada conservan los valores de cálculo normalizados para la coherencia histórica en REST, webhooks, suscripciones, reservas y visualización.

Si una opción guardada se ha eliminado, ocultado o deshabilitado de forma centralizada, WooCommerce muestra un error e impide el pago. El cliente debe eliminar esa línea del carrito y configurar el producto de nuevo. Así se evita comprar silenciosamente una configuración no disponible.

Editar un elemento existente del carrito

Selecciona el nombre del producto de una línea del carrito con complementos para volver a abrir su formulario de producto. POM restaura los valores aceptados y la cantidad de la sesión actual de WooCommerce. Las subidas existentes se muestran mediante un enlace de descarga autorizado y mantienen el control; la entrada de archivo del navegador permanece vacía. Selecciona Cancel editing para volver al carrito sin cambiar nada, o selecciona Update cart item para guardar el reemplazo completo.

Una edición sustituye la línea original en lugar de añadir otra. POM valida el producto o la variación actual, los campos obligatorios, la disponibilidad de las opciones, las subidas, el stock, la cantidad y los precios calculados por el servidor antes de modificar el carrito. Si alguna comprobación falla, la línea original y su archivo existente permanecen en su sitio y los valores enviados que no son archivos siguen disponibles en el formulario de producto para su corrección. Una subida sustituida correctamente se elimina solo después de que se acepte la línea de reemplazo.

Los enlaces de edición del carrito contienen un token opaco de corta duración firmado para el sitio actual, la sesión de WooCommerce, la línea y la revisión de la línea. Nunca exponen ni aceptan una clave de elemento del carrito sin procesar. Un token copiado a otro navegador o subsitio se rechaza. Si la línea se eliminó o se modificó en otra pestaña, la edición anterior se rechaza con un mensaje de elemento obsoleto; recarga el carrito y empieza de nuevo. Incluso cuando la nueva configuración coincide con otra línea del carrito, POM mantiene el resultado editado como una línea separada para que la cantidad nunca se combine de forma inesperada.

Los tokens caducan a los 30 minutos de forma predeterminada. Los desarrolladores pueden ajustar esa duración en segundos con pom_tweaks_product_addons_cart_edit_token_ttl; POM aplica un mínimo de cinco minutos para que una personalización no haga que las ediciones normales del formulario de producto caduquen de inmediato.

Pedidos completados y Order again

Un pedido completado conserva los nombres de campo visibles para el cliente y los valores aceptados que se aplicaban cuando se realizó. Las ediciones posteriores de etiquetas, disponibilidad o precios no reescriben ese registro histórico.

Order again es una compra nueva, por lo que usa las reglas actuales:

  1. WooCommerce lee las selecciones anteriores.
  2. POM Tweaks las empareja con los campos y opciones actuales del producto.
  3. Se aplican las etiquetas, restricciones, disponibilidad y precios actuales.
  4. Si alguna selección anterior ya no es válida, el producto no se añade y se pide al cliente que lo configure de nuevo.

Las renovaciones de suscripción conservan la información de renovación proporcionada por el sistema de suscripciones en lugar de reconstruirla como un pedido repetido normal. POM Tweaks restaura su instantánea guardada y sus filas de compatibilidad en el carrito de renovación para los consumidores de REST y Blocks, pero no vuelve a validar la selección frente al formulario actual ni sustituye el precio de renovación consolidado. La extensión de suscripción copia los metadatos visibles históricos, _pao_ids, _pao_total, y la instantánea POM a la nueva línea de renovación sin filas duplicadas. Esta regla también se aplica al pagar un pedido de renovación fallido o pendiente.

Con Country pricing zones, esa instantánea histórica de renovación conserva también el país y la zona almacenados de la suscripción. Un cambio resuelve el producto y los complementos de destino a partir de sus definiciones actuales en la zona almacenada de la suscripción, de modo que la prorrata combina un origen histórico con un destino actual en una sola zona. Volver a suscribirse sigue siendo una compra nueva y resuelve las definiciones actuales de complementos a partir del país confirmado actual del cliente.

Los flujos relacionados usan deliberadamente precedencias diferentes:

  • Order again crea una compra nueva y resuelve los campos, la disponibilidad, las etiquetas, el precio del producto y los precios de los complementos actuales.
  • Un pago inicial diferido sigue el comportamiento oficial de Product Add-Ons y reconstruye los complementos a partir de las definiciones actuales, porque Subscriptions normalmente no consolida el precio de esa línea.
  • Una renovación o un flujo de renovación de pago de pedido conserva la selección histórica y el precio de línea proporcionados por Subscriptions.
  • Un cambio iniciado por el cliente valida el formulario de complementos del producto de destino y almacena la configuración recién aceptada con la línea del cambio.

Volver a suscribirse y los cálculos de cambio prorrateado siguen siendo propiedad de WooCommerce Subscriptions. Cuando un complemento usa una política explícita de compra solo inicial, recurrente o de una sola vez, POM almacena esa política y su fase de compra aplicada en la instantánea aceptada; los complementos existentes siguen usando el comportamiento de todas las compras.

La instantánea del carrito y del pedido de Product Add-Ons incluye el ID de zona aplicado, la revisión del contexto, la revisión de precios, la fase de recurrencia, la política normalizada y la contribución resuelta. No almacena ni expone zonas no relacionadas. El pago clásico, los Cart and Checkout Blocks, los pedidos de renovación, el REST de pedidos y los webhooks conservan la misma evidencia aceptada.

Para una compra actual, cambiar el país del cliente de WooCommerce reconstruye la selección aceptada en la zona exacta de la nueva línea del carrito antes de aplicar los totales. POM vuelve a validar los campos y opciones actuales, aplica los valores fijos y tramos regionales, mantiene los porcentajes sobre la base regional del producto o del componente Composite, y comprueba los precios personalizados introducidos por el cliente frente al mínimo y máximo regionales nuevos. Las filas transitorias creadas a través del contrato oficial de carrito de WooCommerce Product Add-Ons se emparejan por su identidad de campo estable y una opción actual inequívoca antes de recalcular su precio. Una selección eliminada, reordenada, duplicada o recién invalidada falla de forma cerrada y bloquea el pago en lugar de conservar un importe obsoleto. Las filas históricas de renovación omiten deliberadamente esta reconstrucción del catálogo actual.

Configurar complementos en una línea de pedido

Los administradores pueden configurar un producto inmediatamente después de añadirlo a un pedido editable, o revisar las selecciones de una línea existente:

  1. Abre WooCommerce → Orders y abre un pedido que WooCommerce todavía te permita editar.
  2. Añade un producto simple o una variación manualmente si la línea aún no existe.
  3. Selecciona Configure add-ons debajo de una línea nueva, o Edit add-ons debajo de una línea configurada.
  4. Completa los campos actuales. Las opciones no disponibles siguen visibles como opciones deshabilitadas para que su estado quede claro.
  5. Revisa Historical selections. Deja una fila seleccionada para conservarla, o desmárcala deliberadamente cuando ya no deba pertenecer a la línea.
  6. Selecciona Done. POM Tweaks valida la definición actual del producto en el servidor y actualiza los elementos del pedido, los impuestos, los totales y las notas.

El navegador envía solo identificadores y valores introducidos por el cliente. Las etiquetas, la disponibilidad, las reglas de campo y los precios se resuelven desde el servidor; cambiar un valor del navegador no puede fijar el precio de un complemento. Las subidas existentes aparecen mediante enlaces autorizados que caducan y nunca se insertan en una entrada de archivo. Sube un archivo nuevo para reemplazar uno, mantén su fila en Saved selections para conservarlo o desmarca la fila explícitamente. Una subida obligatoria pasa a ser obligatoria solo después de que se borre su archivo guardado.

Cuando un campo u opción guardados ya no existen, no están disponibles o ya no coinciden con su etiqueta o definición de precio guardadas, su instantánea almacenada sigue siendo la autoridad histórica. Guardar el formulario conserva cada fila histórica marcada con su etiqueta, valor y precio originales. Una selección actual de un campo de opción única sustituye su selección guardada obsoleta; las selecciones de casilla no disponibles pueden coexistir con nuevas selecciones disponibles hasta que un administrador las borre. Seleccionar la versión actual de la misma opción de casilla sustituye su versión histórica en lugar de duplicarla. Los metadatos de elementos de pedido no relacionados no se eliminan.

WooCommerce decide si un pedido es editable. Los pedidos pagados o bloqueados de otro modo no exponen el control salvo que WooCommerce permita la edición. El editor funciona con HPOS y con el almacenamiento clásico de pedidos, conserva cualquier descuento por línea existente, recalcula los impuestos desde la dirección del pedido y, a continuación, recalcula los totales del pedido. Las líneas de pedido de suscripción, las variaciones de suscripción y las variaciones normales usan el mismo flujo. Las integraciones de Bundle y Composite pueden optar por incluir líneas de contenedor compatibles en el editor mediante pom_tweaks_product_addons_display_order_item_editor; el filtro recibe la decisión predeterminada, el elemento del pedido, el producto, el pedido y el modelo de campo público resuelto, sin depender de POM Theme.

Las líneas de extensión muy antiguas que contienen _pao_ids pero no _pao_total almacenado no son editables, porque su contribución de precio anterior no puede separarse con seguridad del precio del producto. Sus metadatos visibles históricos permanecen sin cambios.

Solicitudes de añadir al carrito de la Store API

Los clientes personalizados de la Store API pueden enviar valores de complementos en la propiedad JSON pom_product_addons. Las claves son el UUID estable del contexto de grupo o producto y el UUID del campo presentes en el marcado del formulario de producto. Los campos de opción usan UUID de opción; los campos de casilla usan una matriz de UUID de opción.

{
  "id": 123,
  "quantity": 2,
  "pom_product_addons": {
    "context-uuid": {
      "single-choice-field-uuid": "option-uuid",
      "checkbox-field-uuid": ["first-option-uuid", "second-option-uuid"],
      "text-field-uuid": "Customer value"
    }
  }
}

El servidor resuelve los identificadores enviados frente a las definiciones actuales. Los campos desconocidos, las opciones desconocidas o no disponibles, los valores no válidos y los campos obligatorios omitidos devuelven un error de la Store API. Los cuerpos de archivo no se aceptan en este contrato JSON; los complementos de archivo deben subirse a través del formulario de producto.

Un campo público con type: "custom_textarea" y rich_text: true acepta una cadena que contiene HTML básico, por ejemplo "<p><strong>Project scope</strong></p><ul><li>Design</li></ul>". El mismo contrato de cadena se aplica al valor addons_configuration correspondiente. El servidor selecciona el comportamiento de texto enriquecido a partir de la definición de campo publicada, filtra el HTML y valida su texto legible; un cliente no puede habilitar HTML en un campo de texto plano enviando su propio indicador. Los clientes personalizados proporcionan su propio control de edición. Las visualizaciones estándar de WooCommerce pueden simplificar el formato según sus propias reglas de salida.

Los clientes ya creados para WooCommerce Product Add-Ons pueden seguir usando addons_configuration. Sus claves son los ID numéricos oficiales de complementos devueltos por las API de compatibilidad de producto y grupo. Un valor de opción múltiple es su índice de opción basado en cero, y un valor de casilla es una matriz de índices de opción basados en cero.

{
  "id": 123,
  "quantity": 2,
  "addons_configuration": {
    "1700000001": 0,
    "1700000002": [0, 2],
    "1700000003": "Customer value"
  }
}

Los campos de archivo aceptan solo un file_id opaco creado para la misma sesión de WooCommerce por la ruta de subida multiparte de POM. No se aceptan URL HTTP arbitrarias, rutas del sistema de archivos, etiquetas, declaraciones MIME ni precios. El archivo temporal se reclama solo después de que WooCommerce acepte la línea completa del carrito.

Para un carrito headless, envía el mismo encabezado válido Cart-Token a la ruta de subida multiparte y a la solicitud posterior de la Store API. POM usa la identidad de carrito de ese token en lugar de una sesión de cookies de navegador no relacionada, de modo que el identificador de archivo opaco no puede cruzar a otro carrito tokenizado.

Las respuestas de elementos del carrito exponen has_addons, flat_fee_total, charge_context, economic_result, edit_token y edit_url bajo el espacio de nombres de extensión pom-tweaks-product-addons. economic_result identifica la divisa, el estado y la clase de impuestos heredados del producto y la contribución de línea protegida frente a cupones. Las selecciones visibles para el cliente también siguen disponibles a través de los datos de elementos del carrito de WooCommerce. El token de edición es opaco, está vinculado a la sesión, a la revisión y es de corta duración.

Los clientes headless editan una línea a través del endpoint nativo de extensión del carrito de WooCommerce. Haz POST a /wp-json/wc/store/v1/cart/extensions con el espacio de nombres pom-tweaks-product-addons-edit-item. El objeto data acepta edit_token, el id de producto o variación, los opcionales quantity y variation, y pom_product_addons o addons_configuration. Los valores de archivo existentes usan su file_id opaco de la misma sesión. Una solicitud correcta devuelve la respuesta completa normal del carrito de la Store API; una solicitud fallida u obsoleta deja la línea original sin cambios.

{
  "namespace": "pom-tweaks-product-addons-edit-item",
  "data": {
    "edit_token": "opaque-token-from-the-cart-item-extension",
    "id": 123,
    "quantity": 2,
    "pom_product_addons": {
      "context-uuid": {
        "single-choice-field-uuid": "replacement-option-uuid"
      }
    }
  }
}

Por compatibilidad, la misma respuesta de elemento del carrito expone extensions.addons.addons_data.addons_flat_fees_sum cuando existe una tarifa plana. Este valor es la contribución de la tarifa plana distribuida en el precio unitario actual, coincidiendo con el contrato de respuesta de la extensión oficial.

Las respuestas de producto de la Store API exponen el modelo de campo público en el mismo espacio de nombres de extensión. En las respuestas de Cart and Checkout Block, una tarifa plana de una sola vez se sigue cobrando una vez por la línea y WooCommerce la distribuye entre la cantidad actual en el precio unitario presentado, como hace la extensión oficial. Los enlaces permanentes de producto incluyen el token de edición firmado para que el carrito clásico y los Cart o Checkout Blocks abran el mismo formulario de edición canónico sin confiar en valores o precios de la URL.

Persistencia de la API de pedidos y de los webhooks

Cada complemento aceptado se escribe como metadatos ordinarios y visibles de elemento de línea de WooCommerce, de modo que las respuestas REST nativas de pedidos, los webhooks de pedidos, las pantallas de administración y los correos electrónicos siguen recibiendo el nombre y el valor de complemento habituales. POM Tweaks también escribe el mapa de selección oficial _pao_ids y el importe _pao_total para las integraciones que leen directamente los metadatos de pedido de Product Add-Ons.

Para las subidas, el valor visible es el nombre de archivo saneado y los metadatos de compatibilidad usan un identificador de archivo opaco en lugar de una URL pública reutilizable. Las vistas HTML de cliente y administrador generan enlaces autorizados en el momento de la representación. La exportación de datos personales de WooCommerce incluye el nombre del archivo, el tipo MIME detectado y el tamaño sin exponer una clave de almacenamiento ni una URL de descarga. Cuando el borrado de pedidos configurado de WooCommerce elimina los datos personales, POM elimina los bytes vinculados y los registros privados; la anonimización o retención ordinarias que conservan los datos del pedido también conservan sus archivos. Si varias líneas o pedidos hacen referencia al mismo archivo privado, eliminar una referencia mantiene el archivo disponible para las demás y lo elimina solo después de que desaparezca la última referencia.

Las tarifas planas contribuyen una vez a _pao_total; los importes por cantidad y porcentuales se escalan con la cantidad pedida. Los filtros oficiales existentes para añadir precios a los valores de pedido mostrados y filtrar los metadatos de línea de Product Add-Ons siguen disponibles.

La instantánea POM inmutable también almacena cada política económica normalizada, el tramo seleccionado, la tarifa resuelta, la fase aplicada de una sola vez o de suscripción, la contribución antes de cupón e impuestos, y el importe de cupón protegido de la línea. Los metadatos visibles de Product Add-Ons y las filas de compatibilidad oficiales mantienen su forma establecida; las integraciones que necesiten el resultado de política exclusivo de POM deben leer la extensión de la Store API de POM o la instantánea POM guardada en lugar de inferirlo de una etiqueta traducida.

Para un plan de All Products for WooCommerce Subscriptions, _pao_total sigue la decisión de descuento de complementos de la extensión. Las filas de complementos mantienen su configuración bruta compatible mientras que el total almacenado registra la contribución efectiva aceptada para el plan seleccionado. WooCommerce Subscriptions y WCS_ATT conservan sus propios metadatos de esquema, recurrencia, pago inicial, nueva suscripción y cambio junto a la instantánea POM en las respuestas REST y los webhooks.

Para las líneas de reserva, la instantánea POM inmutable también registra el coste base de reserva aceptado, el número de personas, el número de bloques, los precios de complementos configurados y los precios multiplicados efectivos. _pao_total, los metadatos visibles del pedido, las respuestas REST y los webhooks conservan por tanto el importe aceptado al añadir al carrito incluso si las reglas de reserva o de complementos cambian más tarde. Editar una línea de reserva existente reutiliza ese contexto de reserva guardado; una línea de reserva creada manualmente sin un contexto de reserva aceptado no se recalcula, porque su fecha, disponibilidad y coste no pueden inferirse con seguridad.

Verificación

  1. Añade dos veces el mismo producto con valores de complemento diferentes y confirma que WooCommerce crea dos configuraciones de carrito.
  2. Recarga el carrito y confirma que las selecciones y el total de línea permanecen sin cambios.
  3. Aumenta la cantidad y confirma que las tarifas planas se mantienen una vez por línea mientras que los importes por cantidad y porcentuales se escalan.
  4. Completa un pedido de prueba y confirma que cada valor aceptado aparece debajo de la línea del pedido.
  5. Cambia el precio de una opción reutilizable, usa Order again y confirma que se usa el precio actual.
  6. Deshabilita esa opción reutilizable y confirma que tanto un carrito restaurado como Order again rechazan la selección no disponible.
  7. Si usas un cliente personalizado de la Store API, envía una solicitud válida, un UUID de opción desconocido y una solicitud a la que le falte un campo obligatorio.
  8. Repite la prueba de la Store API con addons_configuration y confirma que la respuesta del carrito contiene los datos oficiales extensions.addons cuando se selecciona una tarifa plana.
  9. Crea un pedido editable manual, añade un producto simple y una variación, y configura cada línea nueva desde su control Configure add-ons.
  10. Edita una selección, un multiplicador de cantidad o un precio personalizado y confirma que el subtotal de línea, el impuesto y el total del pedido cambian sin eliminar metadatos no relacionados.
  11. Abre una línea con una subida existente y confirma que el archivo guardado está enlazado debajo de Historical selections mientras que la entrada de archivo permanece vacía.
  12. Repite la edición con HPOS habilitado y, si procede, en un pedido de suscripción editable.
  13. Inspecciona el pedido a través del REST de WooCommerce y de un webhook de pedido antes y después de editar, y confirma que los valores visibles, _pao_ids y _pao_total permanecen sincronizados.
  14. Con Bookings activo, realiza una reserva de dos bloques y tres personas que contenga complementos por persona, por bloque, porcentuales combinados y de tarifa plana. Confirma que la vista previa del producto, el Cart Block, _pao_total, la respuesta REST del pedido y el webhook usan el mismo total de complementos aceptado.
  15. Crea una suscripción con complementos, cambia la definición actual del complemento y genera una renovación. Confirma que la renovación conserva el precio de línea histórico, los valores visibles, _pao_ids, _pao_total y la instantánea POM sin exigir el formulario actual.
  16. Usa Order again para el mismo producto y confirma que usa la definición y los precios actuales en su lugar.
  17. Paga una renovación fallida y un pedido inicial diferido. Confirma que la renovación se mantiene histórica mientras que el pago inicial sigue la regla de definición actual.
  18. Cambia un producto o variación de suscripción, selecciona un nuevo valor de complemento y confirma que el pedido de cambio y la línea de suscripción resultante conservan esa configuración aceptada.
  19. Abre una suscripción editable, usa Configure add-ons o Edit add-ons y confirma que los impuestos, totales, REST y cargas útiles de webhook permanecen sincronizados.
  20. Elimina permanentemente un pedido de prueba y confirma que su subida se elimina solo cuando ninguna renovación u otro pedido sigue haciendo referencia a ella. Repite con el borrado de datos personales de WooCommerce habilitado.
  21. Desde un carrito clásico, abre una línea simple mediante su enlace de producto, cambia su selección y cantidad, selecciona Update cart item y confirma que existe exactamente una línea de reemplazo con totales recalculados.
  22. Repite con una variación y una subida existente: conserva la subida, reemplázala, bórrala y provoca un fallo de validación. Confirma que la línea y el archivo originales sobreviven al fallo y que los archivos temporales reemplazados se limpian solo después del éxito.
  23. Abre una línea del carrito en dos pestañas. Guarda la primera pestaña, envía la segunda y confirma que la edición obsoleta se rechaza sin cambiar ni duplicar la línea. Repite después de eliminar la línea del carrito.
  24. Repite desde Cart and Checkout Blocks a través del enlace permanente de producto firmado. Luego llama a /wc/store/v1/cart/extensions con el edit_token del elemento del carrito y confirma que el éxito devuelve el carrito actualizado completo, mientras que un token alterado, otra sesión de invitado y un campo obligatorio omitido dejan el carrito original sin cambios.
  25. Añade una línea con una subida privada como invitado, inicia sesión y confirma que el carrito migrado puede seguir descargando y comprando ese archivo mientras que otra cuenta no puede acceder a él.
  26. Con dos zonas de país configuradas, añade campos fijos, porcentuales, por tramos y de precio personalizado, y luego cambia el país del pago. Confirma que cada fila actual usa la segunda zona, que un precio personalizado fuera de rango bloquea el pago y que volver a la primera zona recalcula una sola vez sin acumular importes.
  27. Repite el cambio de país con una fila oficial de confianza cart_item_data['addons']. Confirma que una coincidencia exacta de campo y opción se recalcula, mientras que una definición renombrada, reordenada, duplicada o eliminada bloquea el pago. Genera una renovación desde una suscripción existente y confirma que su fila histórica permanece sin cambios.

Solución de problemas y reversión

  • Si un carrito restaurado está bloqueado, elimina la línea afectada y configura el producto de nuevo desde su página de producto.
  • Si Order again no puede restaurar una línea, confirma que su grupo asignado y las opciones seleccionadas siguen existiendo y están habilitadas.
  • Si Configure add-ons no aparece, confirma que el pedido sigue siendo editable, que la línea se resuelve a un producto o variación y que ese producto tiene campos actuales o una instantánea guardada de POM Product Add-Ons.
  • Si una fila histórica debe eliminarse, desmarca su casilla antes de seleccionar Done. Eliminar una configuración actual no borra metadatos de línea no relacionados.
  • Si una solicitud de la Store API falla, confirma que los UUID de contexto, campo y opción pertenecen a la definición actual del producto y que todos los valores obligatorios están presentes.
  • Si una edición informa de que la línea cambió o ya no existe, recarga el carrito y empieza de nuevo. No reutilices una pestaña anterior ni copies su URL de edición a otro navegador.
  • Para detener el procesamiento nuevo de Product Add-Ons, desactiva Product Add-Ons en Settings → POM Tweaks. Los detalles históricos del pedido siguen siendo legibles.

Relacionado: Storefront fields and pricing, Store API and Blocks y Official Product Add-Ons compatibility.