thalim-theme
Thème WordPress personnalisé du laboratoire THALIM (UMR 7172). Basé sur Timber 2.x (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.
Manuellement :
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 — types de contenu et champs personnalisés (toute la structure éditoriale du site est en Pods)
- Members — gestion fine des rôles et capacités
- Simple Local Avatars — avatars uploadés (utilisés en priorité, Gravatar en fallback)
- 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
*_enpour 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-enetFooter/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 (
bodynatif WP +body_enPods) - 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.mdcô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 pour la documentation exhaustive (conventions Pods, customisations admin, restrictions de contenu, helpers, rewrite rules, etc.).