Files
thalim-theme/README.md
2026-05-12 23:33:46 +02:00

87 lines
4.9 KiB
Markdown

# thalim-theme
Thème WordPress personnalisé du laboratoire **THALIM** (UMR 7172). Basé sur [Timber 2.x](https://timber.github.io/docs/) (templating Twig pour WordPress), avec un système maison de bilinguisme FR/EN, une admin très customisée, et une logique de tri par date d'événement pour les annonces.
- **Version :** 1.0.0
- **Requires WordPress :** 6.0+
- **Requires PHP :** 7.4+
## Installation
Le thème est conçu pour être cloné dans le `wp-content/themes/` d'une installation WordPress. Dans le cadre du projet THALIM, le clonage est automatisé par le script `bootstrap.sh` du repo [`thalim-stack`](https://figureslibres.io/valentin_le_moign/thalim-stack).
Manuellement :
```bash
cd wp-content/themes
git clone gitea@figureslibres.io:valentin_le_moign/thalim-theme.git thalim
cd thalim
composer install
```
Puis activer le thème depuis l'admin WordPress.
## Plugins requis
- [Pods](https://wordpress.org/plugins/pods/) — types de contenu et champs personnalisés (toute la structure éditoriale du site est en Pods)
- [Members](https://wordpress.org/plugins/members/) — gestion fine des rôles et capacités
- [Simple Local Avatars](https://wordpress.org/plugins/simple-local-avatars/) — avatars uploadés (utilisés en priorité, Gravatar en fallback)
- [Relevanssi](https://wordpress.org/plugins/relevanssi/) — moteur de recherche
## Fonctionnalités notables
### Bilinguisme FR/EN maison
- Détection de la langue via le préfixe d'URL `/en/` (`thalim_current_language()`)
- Convention `"FR // EN"` dans un même champ pour les textes courts (titres, lieux, sous-titres, options Pods pick…) — split par le filtre Twig `|bilingual`
- Champs Pods séparés `*_en` pour les textes longs (`body_en`, `biographie_en`, `presentation_en`…)
- Auto-préfixage des URLs internes en mode EN via les filtres `term_link`, `post_link`, `page_link`, `post_type_link`, `author_link`
- Sélecteur de langue : `thalim_language_switcher()`
- Menus : `Navigation` / `Navigation-en` et `Footer` / `Footer-en`
### Tri par date d'événement
Les annonces avec `date_de_debut` / `datetime` (champs Pods) sont triées sur cette date plutôt que `post_date`, via `'thalim_event_date_order' => true` sur les args de `WP_Query`. Filtre de plage : `'thalim_event_date_filter' => ['from' => …, 'to' => …]`.
### Admin très customisée
- Onglets FR/EN sur l'éditeur de corps de post (`body` natif WP + `body_en` Pods)
- Renommage « Article » → « Annonce » dans toute l'UI
- Visibilité conditionnelle des metaboxes Pods + groupement des axes thématiques par période
- Restauration automatique des champs en cas d'erreur de validation Pods (transient + JS)
- Restrictions des contributeurs (édition limitée aux posts où ils figurent comme membre)
- Dashboard et menu Outils masqués pour les non-admins
- Voir `CLAUDE.md` côté stack pour le détail
### AJAX et infinite scroll
Les pages d'archives utilisent un système d'infinite scroll AJAX (`wp_ajax_load_more_posts`) avec recherche Relevanssi, filtres par axe / date / taxonomie / catégorie, et override de langue côté serveur.
## Compilation des styles
Les fichiers SCSS dans `scss/` sont compilés **manuellement** vers `css/`.
## Structure
```
.
├── functions.php # setup, i18n, contexte Twig, AJAX, filtres de requête, mods admin (≈1400 lignes)
├── index.php, single.php … # templates PHP qui chargent les Twig correspondants
├── templates/ # templates Twig (base.twig = layout, autres l'étendent)
│ └── partials/ # header, footer, post-card, agenda-card, search-panel…
├── scss/ → css/ # sources SASS → CSS compilé (commité)
├── js/ # scripts frontend + adminDashboardMods.js
├── inc/ # helpers PHP par contexte :
│ ├── single-helpers.php # résolution champs Pods d'un post
│ ├── author-helpers.php # profil membre + posts liés
│ ├── membres-helpers.php # page /membres (groupes par rôle)
│ ├── post-card-helpers.php # données pour les cards
│ ├── pods-conditional-required.php # patch validation Pods
│ ├── pods-save-error-handler.php # restauration des champs en cas d'erreur
│ ├── post-title-required.php # titre obligatoire
│ └── admin-users-filter.php # filtre Statut sur /wp-admin/users.php
├── assets/ # fonts, images, logo-shapes (SVG)
├── composer.json # dépendance : timber/timber ^2.3
└── vendor/ # Composer (gitignoré, à reconstruire après clone)
```
## Architecture détaillée
Voir le fichier `CLAUDE.md` à la racine du repo [`thalim-stack`](https://figureslibres.io/valentin_le_moign/thalim-stack) pour la documentation exhaustive (conventions Pods, customisations admin, restrictions de contenu, helpers, rewrite rules, etc.).