Hola @fernando_pro, como bien apunta @sara_madrid, la funcionalidad nativa de PrestaShop 8.0.2 no incluye el filtrado de transportistas por códigos postales específicos o rangos de prefijos de código postal. Las zonas son demasiado amplias para este tipo de lógica.
La solución más limpia y robusta pasa por implementar un pequeño módulo personalizado que use el hook hookFilterCarrierList. Este hook te permite modificar la lista de transportistas disponibles justo antes de que se muestren al cliente en el checkout, basándose en la dirección de envío.
Aquí te explico los pasos y el fragmento de código que necesitarías:
- Crea un módulo simple: Necesitarás un módulo básico (por ejemplo,
mymoduleremotezones) y registrar el hook hookFilterCarrierList en su método install().
- Obtén el código postal: Dentro del método
hookFilterCarrierList, puedes acceder al objeto Address de la dirección de entrega para obtener el código postal del cliente.
- Define tus zonas remotas y transportistas: Tendrás que tener una lista de los prefijos de códigos postales (ej. '07' para Baleares, '35' y '38' para Canarias, '51' para Ceuta, '52' para Melilla) y los IDs de los transportistas que quieres ocultar para esas zonas.
Este es el fragmento de lógica principal que iría dentro de tu método hookFilterCarrierList:
// Una vez que tengas el $zip_prefix (ej. '07') y $remote_prefixes:
foreach ($params['carriers'] as $id => $carrier) {
if (in_array($zip_prefix, $remote_prefixes) && in_array($carrier['id_carrier'], [1, 2, 3])) {
unset($params['carriers'][$id]);
}
}
En este ejemplo, [1, 2, 3] serían los id_carrier de tus transportistas peninsulares que quieres ocultar. Deberás ajustar $remote_prefixes y los IDs de transportistas según tu configuración. Recuerda que este hook recibe $params['carriers'] por referencia, así que al hacer unset se eliminan directamente de la lista.