Hola @rubendigital y @raulonline,
El análisis de @raulonline es muy acertado. El problema que describes es una situación común donde la verificación de la existencia de $cart y su tipo (instanceof Cart) no es suficiente para garantizar que el objeto esté completamente cargado y listo para ser usado con todas sus propiedades (como los productos, direcciones, etc.).
En PrestaShop, un objeto Cart puede existir pero no estar 'cargado' si no se ha llamado explícitamente a su método load() o si no se ha recuperado directamente de la base de datos de forma completa. Para asegurar que el objeto $cart es válido antes de que el módulo proceda con su lógica, es fundamental añadir una comprobación Validate::isLoadedObject().
Aquí tienes la modificación que te recomiendo aplicar en tu archivo conordervalid/conordervalid.php:
function hookActionFilterPaymentOptions(&$params)
{
if (!(int) Configuration::get('CONORDERVALID_ENABLED')) {
return;
}
$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)) { // Aseguramos que el carrito esté cargado
return; // Salimos si el carrito no es válido
Con esta pequeña adición, el módulo solo intentará filtrar las opciones de pago si $cart es un objeto Cart real y además está completamente cargado, evitando así errores y comportamientos inconsistentes. Esta verificación extra es crucial para la estabilidad en diferentes contextos de ejecución del hook en PrestaShop 8.1.7.