#!/usr/bin/env python3
"""Brouillon pilier « PrestaShop 9.2 : One Page Checkout natif + nouveautés »."""

from __future__ import annotations

import json
import sys
import urllib.parse
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / "scripts"))

from article_studio.config import load_config  # noqa: E402
from article_studio import wp_client  # noqa: E402

TITLE = (
    "PrestaShop 9.2 est là (bêta) : One Page Checkout natif, Ask AI "
    "et Extra Properties — ce que ça change vraiment"
)
SLUG = "prestashop-9-2-onepage-checkout-ask-ai-extra-properties"
YOAST_TITLE = "PrestaShop 9.2 : One Page Checkout natif + nouveautés (bêta)"
YOAST_DESC = (
    "PrestaShop 9.2 bêta : One Page Checkout natif, Ask AI et Extra Properties. "
    "Ce qui change pour ton tunnel, ta conversion et tes modules — sans bullshit."
)
FOCUS = "PrestaShop 9.2"
EXCERPT = (
    "La bêta PrestaShop 9.2 est ouverte : One Page Checkout natif, assistant Ask AI "
    "et Extra Properties. Décryptage terrain pour marchands et développeurs."
)

CATEGORY_IDS = [2, 44]  # PrestaShop, E-commerce
TAG_NAMES = [
    "prestashop 9.2",
    "prestashop onepage checkout",
    "one page checkout",
    "ask ai prestashop",
    "extra properties",
    "prestashop 9",
    "conversion e-commerce",
]

IMG_PS9 = "https://www.arnaud-merigeau.fr/wp-content/uploads/2025/06/prestashop-9-nouveautes-version.jpg"
IMG_BO = "https://www.arnaud-merigeau.fr/wp-content/uploads/2025/06/tableau-bord-prestashop-9-scaled.png"
IMG_FEATURED_LOCAL = ROOT / "assets" / "prestashop-9-2-featured-2026.png"

CONTACT = "https://www.arnaud-merigeau.fr/contact/"
FREELANCE = "https://www.arnaud-merigeau.fr/freelance-prestashop/"
ARTICLE_URL_PLACEHOLDER = f"https://www.arnaud-merigeau.fr/{SLUG}/"

CONTENT = f"""
<p>Tu l'as vu passer : <strong>PrestaShop 9.2</strong> vient d'ouvrir sa <strong>bêta publique</strong>. Et cette fois, ce n'est pas « juste » une maintenance. C'est la version où PrestaShop livre enfin ce que des milliers de marchands (et d'intégrateurs) réclament depuis des années : un <strong>One Page Checkout natif</strong>.</p>
<p>Dans ce guide, tu vas obtenir :</p>
<ul>
<li>Le décryptage complet de <strong>PrestaShop 9.2</strong> (bêta) : OPC, Ask AI, Extra Properties</li>
<li>Ce que change concrètement le <strong>PrestaShop OnePage Checkout</strong> pour ta conversion mobile</li>
<li>Les impacts modules / thèmes / multiboutique — sans langue de bois</li>
<li>Une feuille de route : tester, préparer, migrer (ou attendre la stable)</li>
</ul>
<p>Spoiler : c'est une <strong>très bonne nouvelle pour PrestaShop et pour l'e-commerce open source</strong>. À condition de ne pas confondre bêta et go-live prod. Allez, on déroule.</p>
<p>Pour le socle 9.x, tu peux relire mon guide <a href="https://www.arnaud-merigeau.fr/prestashop-9/">PrestaShop 9</a> et le point sur <a href="https://www.arnaud-merigeau.fr/prestashop-9-1-nouvelles-fonctionnalites/">PrestaShop 9.1</a>. Si tu viens encore de la 1.7, commence par la <a href="https://www.arnaud-merigeau.fr/migration-prestashop-1-7-vers-9-sans-perdre-seo/">migration SEO-safe 1.7 → 8/9</a>.</p>

<!--more-->

<h2>Sommaire</h2>
<ol>
<li><a href="#pourquoi-prestashop-9-2-compte">Pourquoi PrestaShop 9.2 compte vraiment</a></li>
<li><a href="#beta-ou-stable">Bêta vs stable : ce que tu peux (et ne dois pas) faire</a></li>
<li><a href="#onepage-checkout-natif">One Page Checkout natif : le vrai game changer</a></li>
<li><a href="#opc-vs-4-etapes">OPC vs tunnel 4 étapes : comparatif terrain</a></li>
<li><a href="#activer-opc">Comment activer le PrestaShop OnePage Checkout</a></li>
<li><a href="#ask-ai">Ask AI : l'assistant natif du back-office</a></li>
<li><a href="#extra-properties">Extra Properties : finis les overrides pour un champ</a></li>
<li><a href="#autres-nouveautes">Autres nouveautés 9.2 (Klaviyo, Symfony, B2B…)</a></li>
<li><a href="#modules-themes">Modules, thèmes Hummingbird et compatibilité</a></li>
<li><a href="#conversion-seo">Conversion, abandon panier et SEO : mon avis</a></li>
<li><a href="#feuille-de-route">Feuille de route : tester, préparer, migrer</a></li>
<li><a href="#faq-prestashop-9-2">Questions / réponses</a></li>
<li><a href="#conclusion-prestashop-9-2">Conclusion</a></li>
</ol>

<figure class="wp-block-image size-large"><img src="{IMG_PS9}" alt="PrestaShop 9.2 — nouveautés One Page Checkout Ask AI Extra Properties" width="1200" height="675" loading="lazy" /><figcaption>PrestaShop 9.2 : le socle 9.x passe un cran — conversion, IA back-office et extensibilité native.</figcaption></figure>

<h2 id="pourquoi-prestashop-9-2-compte">1. Pourquoi PrestaShop 9.2 compte vraiment</h2>
<p>Depuis PrestaShop 9, le projet a remis le paquet sur le socle moderne (Symfony, Admin API, Hummingbird). La <a href="https://www.arnaud-merigeau.fr/prestashop-9-1-nouvelles-fonctionnalites/">9.1</a> a livré Hummingbird 2.0, l'accessibilité EAA, PHP 8.5 / Symfony 6.4 LTS. Mais il manquait encore une pièce business critique : un <strong>tunnel d'achat one-page digne de 2026</strong>, sans module Addons payant.</p>
<p>La roadmap officielle le dit clairement : PrestaShop 9.2 embarque trois features « accélératrices » :</p>
<ul>
<li><strong>One Page Checkout</strong> — adresse, livraison et paiement sur une seule page (le classique 4 étapes reste disponible)</li>
<li><strong>Ask AI</strong> — assistant conversationnel natif dans le back-office, branché sur le serveur MCP PrestaShop</li>
<li><strong>Extra Properties</strong> — champs custom sur Product, Customer, Order… sans toucher au schéma core</li>
</ul>
<p>Mon avis terrain : c'est exactement le type de release qui <strong>réarme PrestaShop face à Shopify / Woo</strong> sur la conversion et l'extensibilité. Pas une révolution marketing. Une mise à niveau produit attendue — et bienvenue.</p>

<h2 id="beta-ou-stable">2. Bêta vs stable : ce que tu peux (et ne dois pas) faire</h2>
<p>Clarifions tout de suite, parce que le titre « PrestaShop 9.2 est sorti » peut tromper :</p>
<ul>
<li><strong>Feature freeze</strong> : depuis le 9 juillet 2026, plus de nouvelles features sur la branche 9.2.x</li>
<li><strong>Bêta publique</strong> : téléchargeable pour tests (Classic), avec OPC, Ask AI et Extra Properties</li>
<li><strong>Stable</strong> : pas encore la cible prod — la bêta sert à remonter bugs, edge cases modules et thèmes</li>
</ul>
<p>Règle d'or PrestaShop (et e-commerce en général) : <strong>jamais de bêta en production</strong>. Staging, clone, panier test, paiement sandbox, cas guest / connecté / produits virtuels / multi-transporteurs. Si tu as un CA qui compte, tu attends la stable — mais tu prépares déjà la bascule.</p>
<table>
<thead><tr><th>Profil</th><th>Action recommandée maintenant</th></tr></thead>
<tbody>
<tr><td>Boutique live 1.7 / 8.x</td><td>Continuer la roadmap migration ; tester 9.2 en staging dès possible</td></tr>
<tr><td>Boutique déjà en 9.0 / 9.1</td><td>Installer la bêta sur un clone ; auditer OPC + modules paiement/transporteurs</td></tr>
<tr><td>Agence / freelance</td><td>Recetter opcCarriersUpdated / hooks ; documenter impacts clients</td></tr>
<tr><td>Éditeur de module</td><td>Lire les guides OPC (modules + thèmes) et ouvrir des tickets GitHub si besoin</td></tr>
</tbody>
</table>

<h2 id="onepage-checkout-natif">3. One Page Checkout natif : le vrai game changer</h2>
<figure class="wp-block-image size-large"><img src="https://www.arnaud-merigeau.fr/wp-content/uploads/2026/07/OPC1-browser.png" alt="PrestaShop One Page Checkout natif 9.2 dans un navigateur — contact, adresse, transporteur et paiement sur une seule page" width="1278" height="1985" loading="lazy" /><figcaption>Le <strong>One Page Checkout natif PrestaShop 9.2</strong> (<code>ps_onepagecheckout</code>) dans le navigateur : tout le tunnel sur une page, récap panier à droite.</figcaption></figure>
<p>Le module s'appelle <code>ps_onepagecheckout</code>. Il est <strong>inclus dans PrestaShop 9.2</strong> — pas un Addons premium, pas un « bientôt disponible ». C'était <em>la</em> feature reportée de la 9.1. Elle arrive enfin.</p>
<h3>3.1 Pourquoi un OPC natif change la donne</h3>
<p>Le tunnel classique PrestaShop (4 pages, rechargements complets) date d'une autre époque. Aujourd'hui :</p>
<ul>
<li>Le <strong>trafic mobile</strong> domine</li>
<li>Beaucoup de verticales ont un <strong>panier moyen bas</strong> — chaque friction tue la conversion</li>
<li>Les modules OPC tiers marchent… jusqu'au jour où un update paiement / thème casse le tunnel</li>
</ul>
<p>Un One Page Checkout <strong>maintenu par le core</strong>, c'est moins de dette, plus de garanties de compatibilité 9.2, et une expérience guest moderne sans facture Addons.</p>
<h3>3.2 Ce que PrestaShop a réellement livré</h3>
<ul>
<li><strong>Tout sur un écran</strong> : contact, adresse de livraison, transporteur, paiement</li>
<li><strong>Guest-first</strong> : un email suffit pour démarrer ; le reste se collecte progressivement</li>
<li><strong>AJAX partout</strong> : pas de reload entre les blocs ; transporteurs et moyens de paiement se rafraîchissent en place</li>
<li><strong>Sections conditionnelles</strong> : livraison / paiement visibles mais désactivés tant que les prérequis (adresses) ne sont pas remplis</li>
<li><strong>Produits virtuels</strong> : plus d'adresse de livraison ni de transporteur inutiles — facturation seule</li>
<li><strong>Auth hors tunnel</strong> : login / création de compte sur pages dédiées, puis retour checkout</li>
</ul>
<p>Point technique souvent oublié : PrestaShop a dû résoudre le paradoxe du <strong>panier abandonné</strong>. En OPC, rien n'est « soumis » jusqu'à la fin. Ils capturent juste assez d'info en arrière-plan pour conserver la recovery — sans casser l'UX guest. C'est du vrai craft produit, pas un gadget.</p>
<figure class="wp-block-image size-large"><img src="{IMG_BO}" alt="Back-office PrestaShop 9 — configuration Design Checkout One Page Checkout" width="1200" height="675" loading="lazy" /><figcaption>Le switch OPC / 4 pages se fait dans Design &gt; Checkout — pas besoin d'installer un module marketplace.</figcaption></figure>

<h2 id="opc-vs-4-etapes">4. OPC vs tunnel 4 étapes : comparatif terrain</h2>
<table>
<thead><tr><th>Critère</th><th>Tunnel 4 étapes (classique)</th><th>PrestaShop OnePage Checkout</th></tr></thead>
<tbody>
<tr><td>Pages / reloads</td><td>4 pages, rechargements complets</td><td>1 page, mises à jour AJAX</td></tr>
<tr><td>Guest checkout</td><td>Encore trop de friction</td><td>Email d'abord, progressive disclosure</td></tr>
<tr><td>Mobile</td><td>Souvent pénalisant</td><td>Pensé conversion mobile</td></tr>
<tr><td>Coût</td><td>Natif</td><td>Natif (inclus 9.2)</td></tr>
<tr><td>Compatibilité thème</td><td>Universelle historique</td><td>Hummingbird out of the box ; Classic / thèmes tiers = effort</td></tr>
<tr><td>Modules paiement / carriers</td><td>Mature</td><td>Doivent gérer refresh AJAX + états « données manquantes »</td></tr>
<tr><td>Multiboutique</td><td>Global / historique</td><td>Choix de layout <strong>par boutique</strong></td></tr>
</tbody>
</table>
<p>Important : <strong>le tunnel 4 pages ne disparaît pas</strong>. Tu choisis le layout dans le back-office. Tu peux même faire OPC sur une boutique et classique sur une autre en multiboutique.</p>

<h2 id="activer-opc">5. Comment activer le PrestaShop OnePage Checkout</h2>
<p>Sur une instance 9.2 (bêta / stable) :</p>
<ol>
<li>Va dans <strong>Design &gt; Checkout</strong> (ou Module Manager → <code>ps_onepagecheckout</code>)</li>
<li>Sélectionne le layout <strong>« One-page checkout »</strong></li>
<li>Enregistre — bascule immédiate, réversible vers « Four-page checkout »</li>
</ol>
<p>En multiboutique : change de contexte boutique avant de choisir le layout. Il n'y a pas de réglage global unique pour toutes les boutiques.</p>
<p>Checklist de recette minimale avant de rêver au +X % de conversion :</p>
<ul>
<li>Guest + client connecté</li>
<li>Adresse FR / UE / hors UE (TVA, transporteurs)</li>
<li>Panier produit physique + virtuel + mixte</li>
<li>Codes promo, free shipping, multi-transporteurs</li>
<li>Chaque module paiement (sandbox) + CGV / mentions légales</li>
<li>Mobile réel (Safari iOS + Chrome Android)</li>
</ul>

<h2 id="ask-ai">6. Ask AI : l'assistant natif du back-office</h2>
<p>Deuxième tête d'affiche de PrestaShop 9.2 : <strong>Ask AI</strong>, un assistant conversationnel <strong>préinstallé dans le back-office</strong> (édition Classic).</p>
<p>Tu interroges les données de ta boutique et tu déclenches des actions en langage naturel. Sous le capot : le <strong>PrestaShop MCP Server</strong> (Model Context Protocol). Tu n'es pas prisonnier d'un seul fournisseur : ChatGPT, Claude, Gemini… tu branches ta propre clé API.</p>
<ul>
<li>Panneau Ask AI dans le BO</li>
<li>Choix du provider + clé API</li>
<li><strong>Approbation humaine</strong> avant action sur la boutique (garde-fou critique)</li>
<li>Conversation plein écran branchée sur tes données réelles</li>
</ul>
<p>Mon angle : c'est cohérent avec ce que j'observe chez les marchands — gagner du temps sur les tâches répétitives BO, sans livrer les clés de la boutique à une boîte noire. Si tu creuses l'IA côté service client (pas BO), j'ai un guide dédié : <a href="https://www.arnaud-merigeau.fr/assistant-ia-service-client-prestashop-guide-complet/">assistant IA service client PrestaShop</a>.</p>

<h2 id="extra-properties">7. Extra Properties : finis les overrides pour un champ</h2>
<p>Pour les développeurs (et les marchands qui en paient la dette), <strong>Extra Properties</strong> est peut-être aussi stratégique que l'OPC.</p>
<p>Problème historique : ajouter une référence ERP sur un produit, une métadonnée client, un champ commande… = tables custom, overrides, migrations fragiles, upgrades douloureux.</p>
<p>Extra Properties apporte un <strong>point d'extension natif</strong> :</p>
<ul>
<li>Entités supportées : Product, Combination, Customer, Order…</li>
<li>Scopes : Common / Lang / Shop (et combinaisons)</li>
<li>Types SQL réels (<code>int</code>, <code>float</code>, <code>date</code>, <code>varchar</code>…) — pas un EAV générique lent</li>
<li>Exposition auto : formulaires BO, grilles, Front Office (<code>$product-&gt;extraProperties</code> / Smarty), Admin API JSON</li>
<li>Tables dédiées <code>*_extra</code> : le schéma core reste propre</li>
</ul>
<p>Projet co-construit PrestaShop SA × agence Kiwik. Pour les intégrateurs, c'est moins de plomberie. Pour les marchands, des évolutions métier plus propres et plus upgradables. Tu prépares déjà ton catalogue modules 2026 ? Voir mon <a href="https://www.arnaud-merigeau.fr/guide-modules-prestashop-indispensables-2026-ps8-ps9/">guide des modules indispensables PS 8 / 9</a>.</p>

<h2 id="autres-nouveautes">8. Autres nouveautés 9.2 (Klaviyo, Symfony, B2B…)</h2>
<p>Au-delà du trio star :</p>
<h3>8.1 PrestaShop Automation with Klaviyo</h3>
<p>Le module d'automation marketing Klaviyo est <strong>de nouveau bundlé</strong> dans la distribution Classic. Email / SMS, segments, personnalisation sur données boutique — disponible dès l'install, sans chasse au module.</p>
<h3>8.2 Migration Symfony (suite)</h3>
<p>Nouvelles pages migrées (derrière feature flags) : Countries, Merchandise Return, Hook a module, Quick Access, Email body translations, Tax rules. Moins sexy qu'un OPC, indispensable pour la dette technique et la sécurité des formulaires.</p>
<h3>8.3 Fondations B2B &amp; multi-shipment</h3>
<p>Sur la roadmap / branche 9.2 : activation mode B2B/B2C, travail intensif sur les <strong>shipments</strong> (split, merge, bons de livraison, emails). Ce n'est pas encore « PrestaShop B2B complet », mais les fondations data arrivent — à surveiller si tu fais du B2B sérieux.</p>
<h3>8.4 Feature flags</h3>
<p>Paramètres avancés → New &amp; Experimental Features. Tu actives une capacité, tu testes, tu remontes un bug. C'est le mode d'emploi de la bêta.</p>

<h2 id="modules-themes">9. Modules, thèmes Hummingbird et compatibilité</h2>
<p>C'est là que beaucoup de projets se plantent — ou réussissent.</p>
<h3>9.1 Thèmes</h3>
<ul>
<li><strong>Hummingbird 2</strong> : OPC prévu pour fonctionner out of the box</li>
<li><strong>Classic / thèmes tiers</strong> : pas supportés par défaut ; overrides de templates du module OPC souvent nécessaires</li>
<li>Le module livre ses propres templates FO et prend la main via <code>hookDisplayOverrideTemplate</code></li>
</ul>
<p>Si tu hésites encore sur le front, mon comparatif <a href="https://www.arnaud-merigeau.fr/meilleurs-themes-prestashop-8-et-9-gratuits/">meilleurs thèmes PrestaShop 8 et 9</a> reste une bonne base de décision.</p>
<h3>9.2 Modules paiement &amp; transporteurs</h3>
<p>L'OPC met à jour le panier en AJAX. Un module qui injecte du HTML une seule fois au chargement de page va casser. PrestaShop a cherché à <strong>conserver le maximum de hooks existants</strong>, et ajoute des événements JS (<code>opcCarriersUpdated</code>, <code>opcPaymentMethodSelected</code>, <code>opcDeliveryAddressSelected</code> via <code>prestashop.emit()</code>). Nouveau hook core : <code>actionCheckoutBuildProcess</code>.</p>
<p>Action concrète si tu maintiens un module : lire les guides développeurs modules + thèmes publiés avec la bêta, tester sur 9.2.x, ouvrir des issues GitHub claires.</p>
<h3>9.3 Sécurité &amp; updates</h3>
<p>Bêta ou pas, une boutique live reste une cible. Rappel utile : <a href="https://www.arnaud-merigeau.fr/comment-securiser-votre-boutique-prestashop/">sécuriser sa boutique PrestaShop</a> — et ne jamais exposer une instance de test mal protégée.</p>

<h2 id="conversion-seo">10. Conversion, abandon panier et SEO : mon avis</h2>
<p>Le One Page Checkout ne « booste » pas magiquement le SEO. Il booste la <strong>conversion</strong> — et donc le CA — si ton tunnel était un frein (surtout mobile / guest / panier moyen bas).</p>
<p>Ce que j'attends concrètement sur les boutiques que j'accompagne :</p>
<ul>
<li>Moins d'abandons entre adresse et paiement (moins de drops inter-pages)</li>
<li>Meilleur taux guest → commande</li>
<li>Moins de tickets « mon panier a planté au step 3 »</li>
<li>Moins de dépendance à un module OPC fragile</li>
</ul>
<p>Côté SEO, le vrai chantier reste ailleurs : migration d'URLs, Core Web Vitals, structured data, contenu. L'OPC aide le business ; il ne remplace pas un <a href="https://www.arnaud-merigeau.fr/optimisation-du-referencement-ou-seo/">audit SEO e-commerce</a>.</p>
<p>Et oui : <strong>c'est une bonne nouvelle pour PrestaShop</strong>. Un core qui livre enfin un checkout conversion-first, un assistant IA branchable, et une extensibilité propre… ça redonne de l'oxygène à l'écosystème open source face aux SaaS fermés.</p>

<h2 id="feuille-de-route">11. Feuille de route : tester, préparer, migrer</h2>
<table>
<thead><tr><th>Quand</th><th>Si tu es marchand</th><th>Si tu es intégrateur</th></tr></thead>
<tbody>
<tr><td>Maintenant (bêta)</td><td>Clone staging, activer OPC, 20 commandes test</td><td>Matrice compat modules clients + tickets éditeurs</td></tr>
<tr><td>RC / stable imminent</td><td>Plan de bascule + formation équipe SAV</td><td>Overrides thème OPC, non-régression paiement</td></tr>
<tr><td>Post-stable</td><td>Go-live layout OPC si KPIs OK ; sinon garder 4 pages</td><td>Industrialiser Extra Properties sur projets custom</td></tr>
<tr><td>Encore en 1.7</td><td>Ne pas attendre 9.2 pour migrer — sécuriser d'abord</td><td>Voir le guide <a href="https://www.arnaud-merigeau.fr/migration-prestashop-1-7-vers-9-sans-perdre-seo/">migration SEO-safe</a></td></tr>
</tbody>
</table>
<p>Tu veux un accompagnement cadré (audit tunnel, portage thème Hummingbird, recette OPC) ? Ma page <a href="{FREELANCE}">freelance PrestaShop</a> détaille le mode d'intervention.</p>

<h2 id="faq-prestashop-9-2">12. Questions / réponses</h2>
<h3>PrestaShop 9.2 est-il sorti en version stable ?</h3>
<p>Au moment où j'écris, c'est la <strong>bêta</strong> qui est ouverte (après feature freeze du 9 juillet 2026). La stable suivra une fois les retours communauté intégrés. Ne mets pas la bêta en prod.</p>
<h3>Le One Page Checkout PrestaShop est-il gratuit ?</h3>
<p>Oui : module natif <code>ps_onepagecheckout</code> inclus dans 9.2. Pas d'achat Addons obligatoire pour l'OPC de base.</p>
<h3>Puis-je garder le tunnel 4 étapes ?</h3>
<p>Oui. Le choix se fait dans Design &gt; Checkout. Les deux coexistent.</p>
<h3>Le PrestaShop OnePage Checkout marche-t-il avec tous les thèmes ?</h3>
<p>Out of the box sur Hummingbird. Classic / thèmes custom : travail d'intégration (overrides templates) à prévoir.</p>
<h3>Faut-il jeter mon module OPC tiers dès maintenant ?</h3>
<p>Non. Tant que tu n'es pas en 9.2 stable avec un OPC natif recetté, ton module actuel peut rester pertinent. Réévalue à la stable — un OPC natif bien maintenu vaut souvent mieux qu'une usine à gaz.</p>
<h3>Ask AI remplace-t-il un développeur PrestaShop ?</h3>
<p>Non. C'est un accélérateur BO (requêtes, actions assistées avec validation). La conception tunnel, le SEO, le portage modules restent du métier.</p>
<h3>Extra Properties remplace-t-il les features / attributs produits ?</h3>
<p>Non. C'est un système d'extension pour développeurs / modules, pas un remplacement du modèle catalogue marchand (features, attributs, déclinaisons).</p>
<h3>La 9.2 est-elle intéressante si je suis encore en PrestaShop 8 ?</h3>
<p>Oui comme cible. Mais la priorité reste une migration maîtrisée vers 9.x — pas un saut direct bêta. Lis <a href="https://www.arnaud-merigeau.fr/prestashop-9/">PrestaShop 9</a> + le guide migration.</p>
<h3>Multiboutique : un seul réglage OPC pour tout ?</h3>
<p>Non : configuration <strong>par boutique</strong>. Tu peux mixer OPC et classique selon les storefronts.</p>
<h3>Où remonter un bug de la bêta ?</h3>
<p>GitHub PrestaShop (template Bug), en précisant branche 9.2.x / bêta, PHP, OS, navigateur, steps to reproduce. Feedback modules / thèmes bienvenu aussi.</p>

<h2 id="conclusion-prestashop-9-2">13. Conclusion</h2>
<p><strong>PrestaShop 9.2</strong>, même en bêta, marque un tournant : un <strong>One Page Checkout natif</strong> conversion-first, un <strong>Ask AI</strong> branchable via MCP, et des <strong>Extra Properties</strong> qui professionnalisent l'extensibilité. Ajoute Klaviyo bundlé et la poursuite de la migration Symfony — et tu as une release qui parle autant aux marchands qu'aux devs.</p>
<p>Mon avis tranché :</p>
<ol>
<li>C'est une <strong>excellente nouvelle pour PrestaShop</strong> et pour l'e-commerce open source</li>
<li>Tu <strong>prépares et tu testes</strong> dès maintenant — tu ne déploies pas la bêta en prod</li>
<li>Le gain OPC se jouera sur Hummingbird + modules paiement/transporteurs à jour</li>
</ol>
<p>Tu veux cadrer ton passage 9.1 → 9.2, auditer ton tunnel actuel ou préparer Hummingbird + OPC ? <a href="{FREELANCE}">Découvre mon accompagnement freelance PrestaShop</a> ou <a href="{CONTACT}">écris-moi</a> avec l'URL de ta boutique et ta version actuelle.</p>
"""

SOCIAL_WHO = f"""Je suis Arnaud Mérigeau, freelance PrestaShop & WordPress certifié Experts. Depuis plus de 15 ans, j'accompagne marchands, PME et agences dans le développement de leur e-commerce — migrations, refontes et SEO — grâce à une expertise poussée sur PrestaShop, WordPress et WooCommerce.

Tu veux préparer PrestaShop 9.2 / le One Page Checkout natif sur ta boutique ? Discutons-en.

{FREELANCE}
"""

SOCIAL_WHO_X = (
    "Je suis Arnaud Mérigeau, freelance certifié Experts (+15 ans). On en parle ? "
    + FREELANCE
)

SOCIAL_LINKEDIN = f"""PrestaShop 9.2 (bêta) est là — et cette fois, ce n'est pas une release « cosmétique ».

Ce qui change vraiment :
→ One Page Checkout natif (ps_onepagecheckout) — plus besoin d'un module Addons pour un tunnel one-page
→ Ask AI dans le back-office (MCP, tu branches ton propre provider)
→ Extra Properties : champs custom sur Product / Customer / Order sans overrides pourris

Le tunnel 4 pages reste dispo. Hummingbird est le meilleur point de départ. Et non : tu ne mets pas une bêta en production.

J'ai rédigé le décryptage complet (marchands + devs) :
{ARTICLE_URL_PLACEHOLDER}

""" + SOCIAL_WHO

SOCIAL_X = f"""PrestaShop 9.2 bêta : One Page Checkout natif + Ask AI + Extra Properties.
Décryptage terrain :
{ARTICLE_URL_PLACEHOLDER}

""" + SOCIAL_WHO_X

SOCIAL_FACEBOOK = f"""Bonne nouvelle pour PrestaShop (et pour l'e-commerce open source) : la bêta 9.2 est ouverte.

Au programme : One Page Checkout natif, assistant Ask AI dans le BO, et Extra Properties pour étendre le catalogue / les commandes proprement.

J'ai tout décortiqué sur le blog — ce que ça change pour ta conversion mobile, tes modules et ta feuille de route.

{ARTICLE_URL_PLACEHOLDER}

""" + SOCIAL_WHO


def get_or_create_tag(base: str, user: str, password: str, name: str) -> int:
    slug = name.lower().replace(" ", "-")
    lookup = f"{base}/wp-json/wp/v2/tags?slug={urllib.parse.quote(slug)}"
    _, tags = wp_client._request("GET", lookup, user, password)
    if tags:
        return int(tags[0]["id"])
    _, tag = wp_client._request(
        "POST",
        f"{base}/wp-json/wp/v2/tags",
        user,
        password,
        data=json.dumps({"name": name, "slug": slug}).encode("utf-8"),
        headers={"Content-Type": "application/json"},
    )
    return int(tag["id"])


def save_exports(article_url: str, post_id: int | None = None) -> Path:
    out = ROOT / "exports" / "prestashop-9-2-2026"
    social = out / "social"
    article = out / "article"
    social.mkdir(parents=True, exist_ok=True)
    article.mkdir(parents=True, exist_ok=True)

    (article / "content.html").write_text(CONTENT.strip() + "\n", encoding="utf-8")
    (article / "seo.yaml").write_text(
        "\n".join(
            [
                f"titre_seo: {YOAST_TITLE}",
                f"slug: {SLUG}",
                f"meta_description: {YOAST_DESC}",
                f"focus_keyword: {FOCUS}",
                "categorie_wp: PrestaShop",
                f"tags: {', '.join(TAG_NAMES)}",
                f'h1: "{TITLE}"',
                f"excerpt: {EXCERPT}",
                "",
                "variante_titre_seo_2: PrestaShop OnePage Checkout natif — guide PrestaShop 9.2",
                "variante_meta_2: Découvre le One Page Checkout natif de PrestaShop 9.2 · Ask AI · Extra Properties. Ce qui change pour ta conversion — et ce qu'il ne faut pas faire en bêta.",
                "",
                "variante_titre_seo_3: PrestaShop 9.2 bêta : OPC natif, Ask AI, Extra Properties",
                "variante_meta_3: PrestaShop 9.2 ouvre sa bêta avec un One Page Checkout natif. Comparatif OPC vs 4 étapes, activation, modules Hummingbird et feuille de route.",
                "",
            ]
        ),
        encoding="utf-8",
    )

    posts = {
        "linkedin.txt": SOCIAL_LINKEDIN.replace(ARTICLE_URL_PLACEHOLDER, article_url),
        "x.txt": SOCIAL_X.replace(ARTICLE_URL_PLACEHOLDER, article_url),
        "facebook.txt": SOCIAL_FACEBOOK.replace(ARTICLE_URL_PLACEHOLDER, article_url),
    }
    for name, text in posts.items():
        (social / name).write_text(text.strip() + "\n", encoding="utf-8")

    readme = out / "README.txt"
    readme.write_text(
        f"Article brouillon PrestaShop 9.2\n"
        f"URL prévue : {article_url}\n"
        f"Post ID : {post_id or 'n/a'}\n\n"
        "Fichiers :\n"
        "- article/content.html\n"
        "- article/seo.yaml\n"
        "- social/linkedin.txt\n"
        "- social/x.txt\n"
        "- social/facebook.txt\n"
        "- featured : assets/prestashop-9-2-featured-2026.png\n",
        encoding="utf-8",
    )
    return out


def main() -> int:
    cfg = load_config()
    base = cfg.wp_base_url.rstrip("/")

    if not cfg.wp_user or not cfg.wp_application_password:
        print("Credentials WP manquants dans .secrets/.env")
        return 1

    featured_id = None
    featured_path = IMG_FEATURED_LOCAL
    if not featured_path.is_file():
        alt = Path(
            "/Users/arnaudmerigeau/.cursor/projects/Users-arnaudmerigeau-Locals-arnaudmerigeau/assets/prestashop-9-2-featured-2026.png"
        )
        if alt.is_file():
            featured_path = alt

    if featured_path.is_file():
        print(f"Upload image à la une : {featured_path.name}")
        media = wp_client.upload_media(
            base,
            cfg.wp_user,
            cfg.wp_application_password,
            featured_path,
            alt_text="PrestaShop 9.2 — One Page Checkout, Ask AI et Extra Properties",
            title="PrestaShop 9.2 One Page Checkout",
        )
        featured_id = media.get("id")
        print(f"  media id={featured_id}")
    else:
        print("Image à la une introuvable — brouillon sans featured_media")

    print("Création tags…")
    tag_ids = [
        get_or_create_tag(base, cfg.wp_user, cfg.wp_application_password, t)
        for t in TAG_NAMES
    ]

    payload: dict = {
        "title": TITLE,
        "content": CONTENT.strip(),
        "excerpt": EXCERPT,
        "status": "draft",
        "slug": SLUG,
        "author": cfg.wp_author_id,
        "categories": CATEGORY_IDS,
        "tags": tag_ids,
        "meta": {
            "_yoast_wpseo_title": YOAST_TITLE,
            "_yoast_wpseo_metadesc": YOAST_DESC,
            "_yoast_wpseo_focuskw": FOCUS,
            "_yoast_wpseo_linkdex": "75",
        },
    }
    if featured_id:
        payload["featured_media"] = featured_id

    print("Création brouillon WordPress…")
    _, post = wp_client._request(
        "POST",
        f"{base}/wp-json/wp/v2/posts",
        cfg.wp_user,
        cfg.wp_application_password,
        data=json.dumps(payload).encode("utf-8"),
        headers={"Content-Type": "application/json"},
    )

    post_id = post.get("id")
    link = post.get("link") or f"{base}/{SLUG}/"
    print(f"Brouillon créé — ID {post_id}")
    print(f"Lien : {link}")

    out = save_exports(link, post_id=post_id)
    print(f"Exports : {out}")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
