Cierto, @marinaauto, la versión es crucial. Y por lo que veo en el código de @antonio92, está en una PrestaShop 1.7.3.3.
@antonio92, el ProductController es para la visualización final del producto. Para filtrar los productos en listados o búsquedas, necesitas interceptar la consulta de la base de datos o el array de productos después de que se cargan. Un override directo a Product::getProducts es posible, pero extremadamente delicado y propenso a romperse con cualquier actualización.
Una forma más limpia de manejar esto es a través de un módulo que use los hooks adecuados, como actionProductSearch o actionProductListOverride (aunque este último es más para personalización de la lista).
Aquí tienes un ejemplo conceptual de cómo un módulo podría usar actionProductSearch para filtrar la lista de productos antes de que se muestre:
// En un módulo, usando el hook actionProductSearch
public function hookActionProductSearch($params)
{
$id_country = (int)Country::getByIso(Tools::getCountryFromIP(Tools::getRemoteAddr()));
$filtered = [];
foreach ($params['products'] as $product) {
// Aquí iría tu lógica de validación por país
if ($this->isProductAllowed($product['id_product'], $id_country)) {
$filtered[] = $product;
}
Como ves, la lógica de isProductAllowed la tendrías que desarrollar tú dentro del módulo, probablemente con una tabla personalizada en la base de datos que relacione productos con países permitidos o restringidos.
Para una solución más profesional y que no te dé dolores de cabeza con los overrides o futuras actualizaciones de PrestaShop, te recomendaría una herramienta de ocultar productos por país dedicada. Estos módulos ya manejan todas estas complejidades, incluyendo la visibilidad en listados, búsquedas y páginas de producto, de forma centralizada y sin necesidad de tocar el core.