Hola @marta_tienda30,
Los compañeros @lucas_tech y @ignacioes han dado con el punto clave. El hookActionFilterPaymentOptions se dispara en un momento donde el context->cart puede existir como objeto Cart (es decir, $cart instanceof Cart es true), pero no estar 'cargado' con los datos persistentes de la sesión o la base de datos (es decir, Validate::isLoadedObject($cart) es false).
Para asegurar que la lógica de tu módulo siempre trabaje con un carrito válido y completamente cargado, debes añadir esa comprobación explícita justo después de intentar obtener el carrito. Si el carrito no está cargado, el hook debe terminar su ejecución para evitar problemas.
Aquí tienes la modificación que deberías aplicar en tu archivo 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);
if (!Validate::isLoadedObject($cart)) {
return; // Salir si el carrito no es válido o no está cargado.
}
// Aquí continúa el resto de la lógica del hook con un $cart asegurado
Con este cambio, te aseguras de que cualquier operación posterior en el hook siempre se realice sobre un objeto Cart que ha sido correctamente instanciado y cargado con sus datos desde la base de datos, lo cual es fundamental para el filtrado de opciones de pago.