term_id : 0; } return $cache[ $key ]; } /** * Catégories « structurelles » du site, résolues par slug. * Clés logiques → slug en base. Utiliser thalim_cat_id('seance') etc. */ function thalim_cat_id( string $key ): int { static $slugs = [ // racines / rubriques 'laboratoire' => 'le-laboratoire', 'manifestations' => 'manifestations-scientifiques', 'publications' => 'publications-et-productions', 'mediation' => 'mediation-scientifique', 'ressources' => 'ressources', // catégories techniques 'seance' => 'seance-de-seminaire', 'non-classe' => 'non-classe', 'vie-du-labo' => 'vie-du-labo-intranet', 'newsletter' => 'newsletter', 'message-labo' => 'message-du-laboratoire', // sous-catégories utilisées dans la logique métier 'seminaires' => 'seminaires', 'colloques' => 'colloques-et-journees-detudes', 'communications' => 'communications', 'soutenances' => 'soutenances', 'ouvrages' => 'ouvrages', 'articles' => 'articles', 'revues' => 'revues-et-collections', 'multimedia' => 'multimedia', 'evenements-culturels' => 'evenements-culturels', 'medias' => 'medias', 'gazette' => 'gazette', 'podcast' => 'podcast-de-thalim', 'captations' => 'captations', 'appels' => 'appels-a-contribution', ]; if ( ! isset( $slugs[ $key ] ) ) return 0; return thalim_term_id_by_slug( $slugs[ $key ], 'category' ); } /** * Rôles (taxonomy `role`) techniques, exclus de la recherche de membres. */ function thalim_excluded_role_ids(): array { return array_values( array_filter( [ thalim_term_id_by_slug( 'a-ranger', 'role' ), thalim_term_id_by_slug( 'archive', 'role' ), ] ) ); } /** * Clé couleur stable d'une catégorie racine, indexée sur le term_id (immuable) * plutôt que sur le slug (que l'admin peut régénérer en renommant la catégorie). * Renvoie la clé canonique attendue par les classes CSS .gradient--{clé} / * .category--{clé} (_postcard.scss, _single.scss, _category.scss). * Fallback sur le slug live pour toute racine hors des 5 rubriques connues. */ function thalim_category_color_slug( $root_term_id, $fallback_slug = '' ) { $map = [ 1 => 'le-laboratoire', 3 => 'manifestations-scientifiques', 4 => 'publications-et-productions', 5 => 'mediation-scientifique', 6 => 'ressources', ]; return $map[ (int) $root_term_id ] ?? $fallback_slug; }