Saludos, @rodrigohub16. @patricia_es87 ha dado en el clavo. La arquitectura de PrestaShop no prevé de forma nativa que un mismo carrito se divida en múltiples envíos con diferentes direcciones o transportistas para cada producto o grupo de productos. El objeto Cart está fuertemente acoplado a una única id_address_delivery y id_carrier principal. Cualquier intento de modificar esto directamente en el OrderController o en Cart.php mediante overrides profundos es una batalla cuesta arriba.
El problema de tu snippet reside precisamente en cómo el Cart se gestiona en la sesión y en la base de datos. Para lograr una división real, no solo necesitas cambiar la id_address_delivery, sino también manejar los costes de envío, impuestos, reglas de carrito y pagos de forma independiente para cada 'sub-carrito'. Esto implica una reestructuración significativa del flujo de checkout.
Una solución robusta requiere un módulo que intercepte y modifique el comportamiento del carrito y el proceso de pedido en múltiples puntos, como los hooks actionCartSave, actionObjectOrderAddAfter o incluso creando un nuevo servicio para gestionar estos 'sub-carritos' de forma interna. Un enfoque simplificado en un hook podría verse así, donde el módulo almacena la información necesaria para cada producto:
// En tu módulo personalizado (MySplitShipmentModule.php)
public function hookActionCartSave($params)
{
/** @var Cart $cart */
$cart = $params['cart'];
// Aquí es donde un módulo procesaría datos de envío personalizados
// almacenados para cada producto en el carrito (ej. desde un formulario)
foreach ($cart->getProducts() as $product) {
// Imagina leer datos personalizados para este producto,
// como $product['custom_address_id'] y $product['custom_carrier_id']
Como ves, incluso este snippet es más conceptual que una solución completa, porque la lógica para persistir y recuperar custom_address_id y custom_carrier_id para cada producto es compleja y no puede resolverse con unas pocas líneas. Para evitar la fragilidad de los overrides del core y asegurar la compatibilidad con futuras actualizaciones de PrestaShop 8.x o 9.x, te recomiendo encarecidamente una herramienta de dividir el carrito dedicada. Estos módulos están diseñados específicamente para manejar la complejidad de crear múltiples pedidos a partir de un solo carrito, gestionando direcciones, transportistas, y pagos de manera transparente.