Hola @joaquin_deco,
Entiendo perfectamente tu frustración. PrestaShop 1.7.8.7, como bien indicáis, no ofrece una configuración nativa para filtrar transportistas por códigos postales específicos o rangos dentro de una misma zona. La gestión de zonas es a nivel de país/estado y no contempla esta necesidad.
La solución más limpia y directa en tu caso, sin recurrir a módulos de terceros, pasa por una sobrescritura (override) de la clase Carrier. Deberías crear el archivo override/classes/Carrier.php y en él extender la clase CarrierCore.
Dentro de esta clase sobrescrita, el método clave que debes modificar es getCarriers(). Este método es el encargado de devolver la lista de transportistas disponibles en el checkout. Tendrías que añadir lógica para:
- Obtener la dirección de entrega del carrito (
Context::getContext()->cart->id_address_delivery).
- Extraer el código postal de esa dirección.
- Definir una lista de códigos postales (o prefijos de códigos postales) que corresponden a las zonas remotas/islas.
- Iterar sobre la lista de transportistas (
$carriers) que devuelve el parent::getCarriers() y, si el código postal de la dirección coincide con una zona remota Y el transportista actual es uno de los que quieres ocultar, simplemente lo eliminas del array (unset($carriers[$key])).
Recuerda que después de añadir o modificar un override, es fundamental borrar el archivo var/cache/class_index.php o ir a Parámetros Avanzados > Rendimiento en tu Back Office y forzar la recompilación de las clases para que PrestaShop cargue tu nueva versión de la clase Carrier.