Hola @fernando_pro,
@ana_cart tiene razón, modificar directamente Product::getProducts con una subconsulta compleja no es la mejor opción en PrestaShop 1.7.0.4. Esa función se usa en muchísimos lugares y cualquier cambio puede tener un impacto significativo en el rendimiento y en la estabilidad.
El problema principal de tu enfoque es que el Context no siempre está completamente inicializado con la información de país que necesitas en todas las llamadas a getProducts, y la inyección SQL con NOT IN puede ser ineficiente.
Para PrestaShop 1.7.0.4, podrías considerar un override en el ProductController.php o FrontController.php para interceptar la lista de productos. Si no quieres tocar la query directamente, una solución de filtrado posterior es más manejable, aunque requiere un control más estricto del rendimiento.
Aquí te muestro cómo podrías interceptar y filtrar la lista de productos en un ProductController override (en override/controllers/front/ProductController.php), aunque esto solo afectaría a las páginas de producto individuales, no a listados de categorías o búsquedas. Para una solución global, necesitarías un módulo que se enganche a varios puntos:
class ProductController extends ProductControllerCore
{
public function initContent()
{
parent::initContent();
$id_product = (int)Tools::getValue('id_product');
$product = new Product($id_product, false, $this->context->language->id);
if (Validate::isLoadedObject($product)) {
$country_iso_code = $this->context->country->iso_code;
// Aquí deberías tener una lógica para saber si este producto está restringido
Este snippet es solo un ejemplo para una página de producto específica. Implementar esto de manera global para todo el catálogo (categorías, búsqueda, módulos de productos) es muy complejo y propenso a errores.
Para una solución robusta y que no tengas que mantener tú mismo con cada actualización de PrestaShop, lo más recomendable es utilizar un módulo para ocultar productos por país que ya esté diseñado para manejar todas estas casuísticas de forma eficiente y compatible con futuras versiones.