87 lines
4.9 KiB
Markdown
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.).
|