91 lines
3.6 KiB
PHP
91 lines
3.6 KiB
PHP
<?php
|
|
/**
|
|
* Configuration centralisée des identifiants du site.
|
|
*
|
|
* Les term_ids auto-incrémentés peuvent changer lors d'une réimportation de
|
|
* base ; partout où c'est possible on résout par slug (stable) avec cache
|
|
* statique par requête. Les quelques maps indexées par term_id documentent
|
|
* explicitement leur dépendance à l'installation.
|
|
*/
|
|
|
|
/**
|
|
* Résout un term_id par slug (catégories, rôles, etc.), avec cache statique.
|
|
* Renvoie 0 si le terme n'existe pas — les appelants doivent tolérer 0
|
|
* (clause tax_query vide, comparaison toujours fausse…).
|
|
*/
|
|
function thalim_term_id_by_slug( string $slug, string $taxonomy = 'category' ): int {
|
|
static $cache = [];
|
|
$key = $taxonomy . ':' . $slug;
|
|
if ( ! isset( $cache[ $key ] ) ) {
|
|
$term = get_term_by( 'slug', $slug, $taxonomy );
|
|
$cache[ $key ] = ( $term && ! is_wp_error( $term ) ) ? (int) $term->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;
|
|
}
|