@claudiahub, este es un escenario común donde la funcionalidad nativa de PrestaShop se queda corta, ya que las restricciones de transportistas se basan principalmente en país, zona o grupos de clientes, pero no en códigos postales específicos ni en el contenido dinámico del carrito.
Para lograr esto en PrestaShop 1.7.8.7 de forma personalizada, necesitarás implementar una pequeña personalización mediante un override o un pequeño módulo.
El punto clave donde puedes intervenir es el hook hookFilterApplyCarrier. Este hook se ejecuta justo antes de que PrestaShop muestre los transportistas disponibles al cliente, y te permite modificar la lista de transportistas.
La lógica sería la siguiente:
- Registrar el hook
hookFilterApplyCarrier en un módulo o override (MyModule.php o Override/classes/Carrier.php).
- Dentro de la función asociada al hook, tendrás acceso a:
- El objeto
Cart ($params['cart']).
- El objeto
Address de entrega ($params['address']).
- Un array de transportistas disponibles (
$params['carriers']).
- Para la restricción por código postal: Accede al código postal del
$params['address']->postcode. Puedes tener una lista de códigos postales restringidos por cada transportista en una tabla personalizada o incluso en la configuración de tu módulo. Luego, itera sobre $params['carriers'] y elimina aquellos que no deben mostrarse para ese código postal.
- Para la restricción por contenido del carrito: Itera sobre
$params['cart']->getProducts() para ver qué productos están en el carrito. Si encuentras un producto específico que restringe los transportistas, elimina los transportistas no deseados de $params['carriers'].
- Asegúrate de devolver el array
$params['carriers'] modificado.
Es una solución que requiere algo de desarrollo, pero es la forma más limpia de extender esta funcionalidad en PrestaShop 1.7. Asegúrate de probarlo bien en un entorno de pruebas.