Vingt-quatre classes, une direction d’établissement scolaire, et une seule question récurrente : combien de places reste-t-il dans telle ou telle classe avant la rentrée ? Auparavant, la secrétaire ouvrait chaque fiche classe une par une pour compter manuellement les inscriptions liées, ce qui prenait un temps disproportionné chaque semaine de la période d’inscription.
La solution retenue ajoute une colonne calculée directement dans la liste d’administration des classes, affichant le nombre d’élèves déjà inscrits en face de la capacité maximale. Un seul coup d’œil sur l’écran de liste suffit désormais à repérer les classes presque complètes.
Structurer la relation entre élève et classe
Sur ce site, chaque élève est enregistré comme un article personnalisé de type eleve, relié à sa classe via un champ personnalisé stockant l’identifiant de l’article classe correspondant. Cette relation simple, sans table intermédiaire, suffit pour un établissement de cette taille.
- Le type
classepossède un champ personnalisécapacite_max, saisi manuellement par la direction. - Le type
elevepossède un champ personnaliséclasse_id, renseigné à l’inscription. - La colonne calculée additionne, pour chaque classe affichée, le nombre d’élèves dont
classe_idcorrespond.
Ajouter la colonne à la liste d’administration
Le filtre manage_classe_posts_columns permet d’insérer une nouvelle colonne dans la liste, tandis que l’action manage_classe_posts_custom_column se charge d’y afficher la valeur calculée pour chaque ligne.
add_filter( 'manage_classe_posts_columns', 'ecole_ajouter_colonne_effectif' );
function ecole_ajouter_colonne_effectif( $colonnes ) {
$colonnes['effectif'] = 'Inscriptions';
return $colonnes;
}
add_action( 'manage_classe_posts_custom_column', 'ecole_afficher_colonne_effectif', 10, 2 );
function ecole_afficher_colonne_effectif( $colonne, $post_id ) {
if ( 'effectif' !== $colonne ) {
return;
}
$capacite = (int) get_post_meta( $post_id, 'capacite_max', true );
$inscrits = ecole_compter_eleves_classe( $post_id );
echo esc_html( $inscrits . ' / ' . $capacite );
}

Calculer le nombre d’inscrits par classe
La fonction de comptage utilise une WP_Query avec meta_query pour ne récupérer que les identifiants d’élèves rattachés à une classe donnée, et se contente de fields => 'ids' pour éviter de charger les objets complets, ce qui reste rapide même avec plusieurs centaines d’élèves.
function ecole_compter_eleves_classe( $classe_id ) {
$requete = new WP_Query( array(
'post_type' => 'eleve',
'posts_per_page' => -1,
'fields' => 'ids',
'meta_query' => array(
array(
'key' => 'classe_id',
'value' => $classe_id,
),
),
) );
return count( $requete->posts );
}
Pour un établissement de taille plus importante, cette requête gagnerait à être mise en cache avec un transient, rafraîchi seulement lors de l’ajout ou de la suppression d’un élève, plutôt que recalculé à chaque affichage de la liste.
Mettre en valeur les classes presque complètes
Un simple nombre ne suffisait pas toujours à attirer l’attention de la secrétaire pressée entre deux appels téléphoniques. Une mise en forme conditionnelle, avec une couleur de fond différente selon le taux de remplissage, a rendu l’information immédiatement lisible sans lecture attentive de chaque ligne.
- Moins de 70 % de remplissage : affichage neutre.
- Entre 70 % et 99 % : texte en orange pour signaler une classe qui se remplit.
- 100 % ou plus : texte en rouge, la classe est complète.
En résumé
Une colonne calculée dans la liste d’administration remplace avantageusement une consultation fiche par fiche, dès qu’une information dépend d’un comptage sur un autre type de contenu lié. Le principe s’applique à de nombreux contextes similaires : places restantes sur un événement, nombre de commandes liées à un client, ou articles rattachés à une catégorie précise. La direction de l’établissement a gagné un temps de gestion réel, sans jamais avoir à ouvrir une fiche classe pour vérifier un chiffre qu’elle voit désormais directement dans la liste.