Bonjour @sebastien75,
@hugo3323 et @louis_vendeur35 touchent du doigt le problème. En effet, ProductControllerCore::init() contient bien la logique pour gérer les redirections 301/302 pour les produits désactivés ou invisibles, à condition que les champs redirect_type et id_product_redirected/id_category_redirected soient correctement définis en base de données.
Le point critique est souvent que si le produit est désactivé, le système de réécriture d'URL ou le Dispatcher peut avoir du mal à le charger entièrement, ou parent::init() déclenche le 404 avant que ta logique ne puisse évaluer les propriétés de redirection. Pour contourner cela et s'assurer que le produit est chargé avec toutes ses informations, même s'il est inactif, il faut le charger explicitement avant d'appeler parent::init().
Voici une version de votre override qui devrait fonctionner en chargeant le produit spécifiquement pour vérifier ses paramètres de redirection si l'ID est présent dans l'URL. Cela permet de prendre le pas sur le comportement par défaut de parent::init() qui pourrait générer un 404 si le produit n'est pas actif.
class ProductController extends ProductControllerCore
{
public function init()
{
$id_product = (int)Tools::getValue('id_product');
if ($id_product) {
// Charger le produit même s'il est inactif (le deuxième paramètre 'false')
$product_temp = new Product($id_product, false, $this->context->language->id, $this->context->shop->id);
if (Validate::isLoadedObject($product_temp) && !$product_temp->active) {
// Le produit existe mais est inactif. Vérifier le type de redirection.
Ce code charge le produit product_temp même s'il est inactif (false dans le constructeur new Product()), puis il vérifie les propriétés de redirection. Si une redirection est configurée et valide, il exécute la redirection 301/302 et termine le script (exit;). Si aucune redirection spécifique n'est trouvée ou si le produit n'est pas inactif, alors parent::init() est appelé pour le comportement standard de PrestaShop (qui peut inclure le 404 si le produit n'est pas actif et n'a pas de redirection).
N'oubliez pas de supprimer votre ancien override, de vider le cache des overrides (dans Paramètres avancés > Performances) après avoir mis en place ce fichier et de vérifier vos URLs.