Dupliquer un thème PrestaShop pour protéger ses modifications des mises à jour
Apprenez à dupliquer votre thème PrestaShop pour préserver vos personnalisations lors des mises à jour. Méthode complète pour PS 1.6, 1.7 et 8.x.
En bref : Ne modifiez jamais le thème par défaut de PrestaShop : dupliquez-le (1.6) ou créez un thème enfant (1.7/8.x) pour que vos personnalisations survivent à toutes les mises à jour du CMS et des modules.
Introduction
L'une des erreurs les plus fréquentes chez les marchands PrestaShop consiste à modifier directement le thème par défaut de la boutique. Le jour où une mise à jour du CMS ou du thème est appliquée, toutes les personnalisations sont écrasées sans possibilité de retour en arrière. C'est un scénario que je rencontre régulièrement en intervention technique depuis 2014.
La solution est simple et éprouvée : dupliquer le thème avant d'y apporter la moindre modification. Cette approche garantit que vos personnalisations survivent à toutes les mises à jour futures.
Pourquoi les mises à jour écrasent vos modifications
Lorsque PrestaShop applique une mise à jour, le processus remplace les fichiers du thème par défaut (default-bootstrap sur 1.6, classic sur 1.7/8.x) par leurs nouvelles versions. Si vous avez modifié ces fichiers directement, vos changements sont purement et simplement supprimés.
Le mécanisme de chargement des templates de PrestaShop fonctionne ainsi :
- PrestaShop cherche d'abord les fichiers dans le dossier du **thème actif** sélectionné dans le back-office
- Si un fichier n'est pas trouvé dans le thème actif, il remonte au thème parent (sur 1.7/8.x)
- Les modules suivent la même logique : PrestaShop lit **en priorité** les dossiers `modules/` situés à l'intérieur du thème sélectionné
- Accédez à **Préférences → Thèmes**
- Cliquez sur **Exporter le thème** (bouton en haut à droite)
- PrestaShop génère une archive `.zip` du thème actif
- Renommez cette archive avec le nom de votre thème personnalisé (par exemple `montheme.zip`)
- Retournez dans **Préférences → Thèmes** et importez le fichier `.zip` renommé
- Activez votre nouveau thème
- Seuls les fichiers modifiés sont présents dans le thème enfant
- Le thème parent peut être mis à jour indépendamment
- La maintenance est considérablement simplifiée
- **Sauvegardez** votre base de données et vos fichiers (`/themes/`, `/modules/`, `/override/`)
- **Testez** la mise à jour sur un environnement de pré-production
- **Vérifiez** la compatibilité de vos modules avec la nouvelle version
- Videz le cache PrestaShop (**Paramètres avancés → Performances**)
- Vérifiez visuellement le front-office
- Testez le tunnel de commande complet
- Contrôlez les logs d'erreurs PHP
Cette hiérarchie de chargement est précisément ce qui rend la duplication de thème si efficace.
Méthode de duplication sur PrestaShop 1.6
Sur PrestaShop 1.6, la duplication se fait directement depuis le back-office :
Vous disposez désormais d'une copie indépendante du thème d'origine sur laquelle vous pouvez travailler librement.
Méthode recommandée sur PrestaShop 1.7 et 8.x : le thème enfant
À partir de PrestaShop 1.7, la notion de thème enfant (child theme) a été introduite. C'est la méthode recommandée car elle offre plusieurs avantages par rapport à la simple copie intégrale :
Créer un thème enfant manuellement
Créez la structure suivante dans /themes/ :
themes/
└── mon-theme/
├── config/
│ └── theme.yml
├── assets/
│ └── css/
│ └── custom.css
└── templates/
└── (vos surcharges ici)
Le fichier theme.yml doit déclarer le thème parent :
parent: classic
name: mon-theme
display_name: Mon Thème Personnalisé
version: 1.0.0
author:
name: "Mon Entreprise"
email: "contact@monentreprise.fr"
meta:
compatibility:
from: 8.0.0
to: ~
assets:
use_parent_assets: true
css:
custom:
path: assets/css/custom.css
media: all
priority: 200
Avec cette configuration, PrestaShop charge d'abord les assets du thème parent classic, puis applique vos surcharges par-dessus.
Surcharger un template spécifique
Pour modifier un template, copiez uniquement le fichier concerné en conservant la même arborescence :
# Exemple : surcharger la page produit
mkdir -p themes/mon-theme/templates/catalog/
cp themes/classic/templates/catalog/product.tpl themes/mon-theme/templates/catalog/product.tpl
PrestaShop utilisera automatiquement votre version du fichier.
La surcharge des modules via le thème
Un aspect souvent méconnu : le dossier modules/ à l'intérieur de votre thème permet de surcharger les templates et assets des modules sans toucher aux fichiers d'origine.
themes/mon-theme/
└── modules/
└── ps_featuredproducts/
└── views/
└── templates/
└── hook/
└── ps_featuredproducts.tpl
PrestaShop lit en priorité les fichiers situés dans le dossier modules/ du thème actif. Cela signifie que vous pouvez personnaliser l'affichage de n'importe quel module tout en conservant la possibilité de le mettre à jour via le back-office.
Surcharger les assets CSS/JS d'un module
Même logique pour les fichiers CSS et JavaScript :
themes/mon-theme/
└── modules/
└── ps_searchbar/
└── views/
└── css/
└── ps_searchbar.css
Bonnes pratiques pour la gestion des mises à jour
Avant chaque mise à jour
Après la mise à jour
Utiliser Git pour versionner le thème
La meilleure assurance contre les pertes de modifications reste le versionnement :
cd themes/mon-theme/
git init
git add .
git commit -m "Initial : duplication du thème classic"
À chaque modification, un commit permet de tracer précisément les changements et de revenir en arrière si nécessaire.
Résumé de la stratégie par version
Quelle que soit la version, le principe fondamental reste le même : ne jamais modifier le thème par défaut. Dupliquez, personnalisez, et vos modifications traverseront sereinement toutes les mises à jour.
Questions fréquentes
Tout ce que vous devez savoir sur ce sujet.
Un projet PrestaShop ?
Discutons-en directement.
193 projets livrés
Lire sur le blog

Alexandre Carette
Expert PrestaShop & Architecture E-commerce
Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.