# 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.).