---
title: actionCartSave
section: hooks
slug: actionCartSave
hook_type: action
category: cart
location: FO
since_version: 1.5
source_url: "https://ayudaprestashop.es/hooks/actionCartSave"
---

# Hook `actionCartSave`

| Propiedad | Valor |
| --- | --- |
| Tipo | Action |
| Localizacion | FO |
| Categoria | cart |
| Desde version | 1.5 |

## Descripcion

Se ejecuta cada vez que el carrito es guardado en la base de datos, ya sea al añadir productos, cambiar cantidades, aplicar cupones o cualquier otra modificacion. Es el hook mas general del carrito y se dispara con mucha frecuencia, por lo que el codigo debe ser ligero.

## Parametros

| Nombre | Tipo | Requerido | Descripcion |
| --- | --- | --- | --- |
| `cart` | `Cart` | si | Objeto Cart que acaba de ser guardado |
| `id_cart` | `int` | si | ID del carrito guardado |

## Valor de retorno

- **Tipo**: `void`
- **Descripcion**: Este hook no espera valor de retorno

## Disparado por

| Contexto | Clase | Metodo | Fichero |
| --- | --- | --- | --- |
| Cart | `Cart` | `add() / update()` | `classes/Cart.php` |

**Paginas**: `cart`, `checkout`, `product`

## Registro del hook

```php
<?php
public function install()
{
    return parent::install()
        && $this->registerHook('actionCartSave');
}
```

## Ejemplo de uso

```php
<?php
/**
 * Hook actionCartSave — carrito guardado
 */
public function hookActionCartSave(array $params)
{
    if (empty($params['cart']) || empty($params['cart']->id)) {
        return;
    }

    /** @var Cart $cart */
    $cart = $params['cart'];

    // Ejemplo: Sincronizar carrito con servicio externo de remarketing
    $products = $cart->getProducts();
    $total = $cart->getOrderTotal(true, Cart::BOTH);

    // Solo sincronizar si el cliente esta logueado
    if ($cart->id_customer > 0) {
        $cacheKey = 'mymodule_cart_sync_' . (int) $cart->id;
        $lastSync = Cache::retrieve($cacheKey);
        $now = time();

        // Evitar sincronizar mas de una vez cada 30 segundos
        if (!$lastSync || ($now - $lastSync) > 30) {
            Cache::store($cacheKey, $now);
            // Guardar datos para sincronizacion asincrona
            Db::getInstance()->insert('mymodule_cart_sync', [
                'id_cart'     => (int) $cart->id,
                'id_customer' => (int) $cart->id_customer,
                'total'       => (float) $total,
                'nb_products' => count($products),
                'synced'      => 0,
                'date_add'    => date('Y-m-d H:i:s'),
            ], false, true, Db::ON_DUPLICATE_KEY);
        }
    }
}
```

## Notas y gotchas

- Este hook se ejecuta MUY frecuentemente — evita consultas pesadas o llamadas HTTP sincronas.
- El carrito puede estar vacio cuando se dispara (por ejemplo, al crear un carrito nuevo vacio).
- Verifica siempre que $params['cart']->id exista antes de operar — puede ser null en algunos casos.
- Se dispara tanto en add() como en update() del objeto Cart.
- No confundir con actionAddProduct que solo se dispara al añadir un producto especifico.

## Hooks relacionados

- [`actionAddProduct`](https://ayudaprestashop.es/hooks/actionAddProduct)
- [`actionBeforeCartUpdateQty`](https://ayudaprestashop.es/hooks/actionBeforeCartUpdateQty)

## Guias relacionadas

- [modules/main-file](https://ayudaprestashop.es/modules/main-file)
- [cart/cart-rules](https://ayudaprestashop.es/cart/cart-rules)

## Historial de versiones

| Version | Cambio |
| --- | --- |
| 1.5 | Introducido |
| 1.7 | Sin cambios. Compatible con PS 1.7, 8.x y 9.x |


---

*Fuente: [https://ayudaprestashop.es/hooks/actionCartSave](https://ayudaprestashop.es/hooks/actionCartSave). Version Markdown generada automaticamente para consumo por LLMs.*
