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

4.9 KiB

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 *_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 pour la documentation exhaustive (conventions Pods, customisations admin, restrictions de contenu, helpers, rewrite rules, etc.).