This commit makes the site editable from WP admin (Gutenberg or Bricks "Edit with Bricks") and translatable via WPML Translation Editor by shifting page rendering away from Custom Templates and into post_content. Architecture change ------------------- Before: Custom Templates assigned to each page (page-solution-detail.php etc.) generated the page HTML at runtime by reading from inc/*-data.php arrays. WPML had nothing to translate, Bricks Builder had nothing to edit, the client could only modify content by editing PHP. After: - Pages now hold their full Gutenberg HTML inside post_content - The default page.php template renders the_content() — no Custom Templates assigned anymore - Bricks Builder picks up post_content and converts it to its element tree when "Edit with Bricks" is clicked - WPML Translation Editor exposes every block for translation - The client can edit pages directly in WP admin What this commit ships ---------------------- - inc/render-blocks.php: data array → Gutenberg HTML payload generator with helpers per section type (prose / cards / list / cta) and per page archetype (solution / industry / technology / editorial / form / overview hub). - inc/shortcodes.php: [av_form slug="request-demo"] for dynamic form blocks (forms can't live as static HTML — they need nonces and per-request state). - inc/i18n.php: av_lang() / av_t() helpers for inline string translation in header.php and footer.php (covers ~80 UI strings); switches based on WPML's wpml_current_language filter. - page.php: minimal default template — get_header() + the_content() + get_footer(). - header.php: real WPML language switcher driven by wpml_active_languages filter (replaces the placeholder EN · FR toggle); UI strings now route through av_t(). - footer.php: same UI string treatment. - Custom Templates retained but no longer assigned (pages were stripped by the migration mu-plugin); they remain available if a page wants to opt back into the data-file pattern. Operational migrations (one-shot mu-plugins, not versioned) ----------------------------------------------------------- 1. asterion-migrate-to-blocks.php walked all 26 PHP-templated pages, pre-rendered them via the new render-blocks helpers, wrote the result to post_content, and stripped _wp_page_template. 2. asterion-duplicate-fr.php cloned all 35 pages into French via WPML API, preserved parent/child hierarchy, linked translations through the trid table, marked them as duplicates pending refinement. 3. asterion-fix-fr-slugs.php aligned French slugs with English ones (WP's wp_unique_post_slug() had appended -2 suffixes; we bypass via $wpdb->update so /fr/solutions/ resolves correctly). Verified -------- - All 35 EN URLs return HTTP 200 - All 35 FR URLs return HTTP 200 under /fr/<slug>/ - Language switcher in header outputs correct hreflang links - WPML emits hreflang en / fr / x-default in <head> - Body class confirms wp-child-theme-asterion-bricks active - Bricks frontend CSS still enqueued - Inter Variable still preloaded Next steps ---------- - French content is currently the duplicated EN copy. Translate via WP admin → WPML → Translation Editor (per-block UI), or edit pages directly in /fr/<slug>/ via Gutenberg / Bricks - WPML String Translation can scan the theme to surface av_t() / __() strings for UI-level translation overrides Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Asterion VR — Refonte du site web 2026
Repo de la refonte d'asterionvr.com : nouveau site institutionnel B2B/B2G de la plateforme XR PROSERVE pour les forces de sécurité européennes (police, special forces, military, firefighters).
Stack : WordPress 6.x + Bricks Builder (parent) + child theme custom
asterion-bricks+ WPML. Cible : Lighthouse 90+, WCAG 2.1 AA, mobile-first, RGPD-natif, hébergement français.
Documents de référence
À lire dans cet ordre avant tout travail technique :
BRIEF-Claude-Code.md— brief de démarrage projet (13 sections, contraintes, conventions).Asterion-VR_Refonte-2026_Strategie-et-Contenu.pdf— livrable 1 (84 p) : diagnostic, stratégie, sitemap, copy EN prête de toutes les pages.Asterion-VR_Refonte-2026_Design-Handoff-Specification.pdf— livrable 2 (31 p) : tokens, composants UI, wireframes des 7 templates, motion, a11y.
Les .txt extraits des PDF sont gitignorés. Pour les régénérer :
pdftotext -layout "Asterion-VR_Refonte-2026_Design-Handoff-Specification.pdf" "design-handoff.txt"
pdftotext -layout "Asterion-VR_Refonte-2026_Strategie-et-Contenu.pdf" "strategie-et-contenu.txt"
(pdftotext est inclus dans Git for Windows : C:\Program Files\Git\mingw64\bin\pdftotext.exe.)
Setup local (LocalWP + symlink Git)
1. Pré-requis
- LocalWP (https://localwp.com) configuré en mode
localhost(Preferences → Advanced → Router Mode =localhost) pour cohabiter avec d'autres stacks locales (XAMPP, etc.). - Site LocalWP créé : nom Asterion 2026, dossier
C:\Users\j_foucher\Local Sites\asterion-2026\. - ZIP des plugins commerciaux (chacun doit fournir les siens, depuis son propre compte) :
bricks.X.Y.Z.zip— depuis https://bricksbuilder.iositepress-multilingual-cms.X.Y.Z.zip— depuis https://wpml.org- À déposer dans
ThirdParty/(gitignored).
2. Installer Bricks parent
- Décompresser
ThirdParty/bricks.X.Y.Z.zipdans<LocalWP site>/app/public/wp-content/themes/. - Activer Bricks dans WP Admin → Apparence → Thèmes.
- Renseigner la license dans Bricks → License (depuis ton compte bricksbuilder.io).
3. Installer WPML
- Dans WP Admin → Extensions → Ajouter → Téléverser, charger
ThirdParty/sitepress-multilingual-cms.X.Y.Z.zip. - Activer le plugin et entrer la clé de license depuis ton compte wpml.org.
4. Symlink le child theme depuis ce repo vers LocalWP
Depuis une PowerShell admin :
New-Item -ItemType SymbolicLink `
-Path "C:\Users\j_foucher\Local Sites\asterion-2026\app\public\wp-content\themes\asterion-bricks" `
-Target "C:\ASTERION\GIT\WP2026\wp-content\themes\asterion-bricks"
Puis dans WP Admin → Apparence → Thèmes, activer Asterion Bricks (le child theme).
Structure du repo
WP2026/
├── BRIEF-Claude-Code.md # brief projet (lecture obligatoire)
├── README.md # ce fichier
├── MISSING-ASSETS.md # tracking des visuels/medias manquants
├── *.pdf # 2 livrables stratégie + design (sources de vérité)
├── ThirdParty/ # gitignored — ZIP plugins commerciaux à déposer manuellement
│ ├── bricks.*.zip
│ └── sitepress-multilingual-cms.*.zip
└── wp-content/
└── themes/
└── asterion-bricks/ # le child theme — coeur du travail
├── style.css # en-tête WP + import tokens
├── functions.php # hooks, registers, queries
├── theme.json # tokens globaux (Gutenberg + Bricks)
├── assets/
│ ├── css/ # tokens.css, components.css, utilities.css
│ ├── js/ # vanilla JS, defer
│ ├── fonts/ # Inter + Inter Display self-hosted (RGPD)
│ └── img/
├── templates/ # exports Bricks JSON (versionnés)
├── inc/ # CPT, ACF field groups, SEO schema
└── README.md
Conventions
- CSS : préfixe
av-(asterion-vr), nommage BEM-light, zéro hardcode (tout via tokens). - JS : vanilla, defer, modules ES6 si nécessaire.
- Images : AVIF + WebP + JPG fallback, lazy-loading natif sauf hero.
- Vidéos : MP4 H.264 + WebM VP9, autoplay muted plays-inline loop, poster image.
- Commits : Conventional Commits (
feat:,fix:,chore:,style:,refactor:,test:,docs:). - Branches :
main= stable,feat/<scope>= work in progress, merge après validation.
Hors scope phase actuelle
Production (OVH/O2switch + Cloudflare), migration depuis Avada, plan 301, traduction FR (linguiste interne), création articles blog éditoriaux (post-launch).
Contact
- Client : Jérôme Foucher — Asterion VR — jerome.foucher@asterionvr.com
- Repo : git.polymorph.fr (privé)