Hola @alejandrolab,
@alberto_92 tiene razón, la inicialización del objeto $cart en PrestaShop 1.7 puede ser un poco caprichosa dependiendo del contexto exacto de la llamada al hook. El fragmento que compartes intenta obtener el carrito de $params o del context, lo cual es lo correcto. Sin embargo, el problema que mencionas, donde el chequeo !$cart instanceof Cart || !Validate::isLoadedObject($cart) falla, sugiere que incluso si $cart es una instancia de Cart, no está completamente cargado.
La solución más directa para asegurar la fiabilidad es añadir una verificación explícita justo después de la asignación del $cart, para garantizar que sea un objeto Cart válido y cargado antes de proceder con cualquier lógica de filtrado. Esto te permitirá salir del hook si el carrito no es usable, evitando errores o comportamientos inesperados.
Aquí tienes la modificación que deberías aplicar en tu conordervalid/conordervalid.php:
$cart = (isset($params['cart']) && $params['cart'] instanceof Cart)
? $params['cart']
: ((isset($this->context->cart) && $this->context->cart instanceof Cart) ? $this->context->cart : null);
// Asegurarse de que $cart es un objeto Cart válido y cargado
if (!($cart instanceof Cart) || !Validate::isLoadedObject($cart)) {
return; // Si no es válido, salimos sin filtrar opciones
}
Con estas líneas adicionales, te aseguras de que cualquier lógica posterior en el hook solo se ejecute con un carrito correctamente cargado. Para una gestión más avanzada de la validación de pedidos y restricciones condicionales sin tocar el código directamente, te recomiendo echar un vistazo a módulos dedicados como el de Validación condicional de pedidos, que ofrece una interfaz de configuración completa para este tipo de escenarios.