---
title: actionProductSave
section: hooks
slug: actionProductSave
hook_type: action
category: product
location: BO
since_version: 1.5
source_url: "https://ayudaprestashop.es/hooks/actionProductSave"
---

# Hook `actionProductSave`

| Propiedad | Valor |
| --- | --- |
| Tipo | Action |
| Localizacion | BO |
| Categoria | product |
| Desde version | 1.5 |

## Descripcion

Se ejecuta cuando un producto es guardado desde el back office, ya sea al crear uno nuevo o al modificar uno existente. Es el hook general para detectar cualquier guardado de producto, ideal para sincronizar datos con sistemas externos, regenerar caches o actualizar indices de busqueda.

## Parametros

| Nombre | Tipo | Requerido | Descripcion |
| --- | --- | --- | --- |
| `id_product` | `int` | si | ID del producto guardado |
| `product` | `Product` | si | Objeto Product guardado |

## Valor de retorno

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

## Disparado por

| Contexto | Clase | Metodo | Fichero |
| --- | --- | --- | --- |
| AdminProductsController | `AdminProductsController` | `processAdd() / processUpdate()` | `controllers/admin/AdminProductsController.php` |

**Paginas**: `admin-products`

## Registro del hook

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

## Ejemplo de uso

```php
<?php
/**
 * Hook actionProductSave — producto guardado en admin
 */
public function hookActionProductSave(array $params)
{
    $idProduct = (int) $params['id_product'];
    /** @var Product $product */
    $product = $params['product'];

    // Ejemplo: Sincronizar producto con catalogo externo
    $languages = Language::getLanguages(false);
    $productData = [
        'id'        => $idProduct,
        'reference' => $product->reference,
        'ean13'     => $product->ean13,
        'price'     => $product->price,
        'active'    => (bool) $product->active,
        'names'     => [],
        'descriptions' => [],
    ];

    foreach ($languages as $lang) {
        $idLang = (int) $lang['id_lang'];
        $productData['names'][$lang['iso_code']] = $product->name[$idLang] ?? '';
        $productData['descriptions'][$lang['iso_code']] = strip_tags($product->description_short[$idLang] ?? '');
    }

    // Marcar para sincronizacion
    Db::getInstance()->insert('mymodule_product_sync', [
        'id_product' => $idProduct,
        'payload'    => pSQL(json_encode($productData)),
        'synced'     => 0,
        'date_add'   => date('Y-m-d H:i:s'),
    ], false, true, Db::ON_DUPLICATE_KEY);

    // Limpiar cache del producto
    if (method_exists('Cache', 'clean')) {
        Cache::clean('product_' . $idProduct . '_*');
    }
}
```

## Notas y gotchas

- Este hook se ejecuta tanto para productos nuevos como para actualizaciones — verifica con $product->isNew() si necesitas distinguir.
- No confundir con actionProductAdd (solo creacion) o actionProductUpdate (solo actualizacion).
- Los hooks ObjectModel (actionObjectProductAddAfter, etc.) se disparan a nivel de ORM, mientras que este se dispara a nivel de controlador.
- En PS 1.7+ con Symfony, este hook puede dispararse en contextos diferentes al controlador clasico.
- El producto ya esta guardado en BD cuando se ejecuta este hook.

## Hooks relacionados

- [`actionProductAdd`](https://ayudaprestashop.es/hooks/actionProductAdd)
- [`actionProductUpdate`](https://ayudaprestashop.es/hooks/actionProductUpdate)
- [`actionProductDelete`](https://ayudaprestashop.es/hooks/actionProductDelete)
- [`actionObjectProductUpdateAfter`](https://ayudaprestashop.es/hooks/actionObjectProductUpdateAfter)

## Guias relacionadas

- [modules/main-file](https://ayudaprestashop.es/modules/main-file)
- [products/product-management](https://ayudaprestashop.es/products/product-management)

## Historial de versiones

| Version | Cambio |
| --- | --- |
| 1.5 | Introducido |
| 1.7 | Compatible con el nuevo formulario de producto Symfony |
| 8.0 | Sin cambios. Compatible |


---

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