Valentin Le Moign f9467eb101 fix: verrouillage catégorie dans la modale d'ajout de séance
Le verrouillage de la catégorie sur « Séance de séminaire » était attaché via
$(window).on('load') depuis $(document).ready. Dans l'iframe de la modale Pods,
l'événement load est déjà émis quand ce code s'exécute, donc le handler ne se
déclenchait jamais (révélé par un changement de timing de chargement WP/jQuery).
Exécution immédiate si document.readyState vaut déjà 'complete', sinon attente
de load comme avant.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 18:20:30 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00
2026-05-12 23:33:46 +02:00

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

Description
No description provided
Readme 875 KiB
Languages
PHP 30.2%
JavaScript 20.6%
CSS 18.8%
Twig 17.6%
SCSS 12.8%