# Compter automatiquement les élèves inscrits par classe dans l’administration

> Ajouter une colonne calculée affichant le nombre d'inscriptions restantes par classe dans la liste d'administration, pour un établissement scolaire.

- Auteur : WordPress Développement
- Publié le : 2020-07-08
- Mis à jour le : 2020-07-08
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/compteur-eleves-inscrits-par-classe/

## L’essentiel

- Une colonne calculée évite d'ouvrir chaque fiche classe une à une
- manage_posts_columns et manage_posts_custom_column suffisent
- Le calcul repose sur une simple comptabilisation de wp_count_posts filtrée

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.

1. Le type `classe` possède un champ personnalisé `capacite_max`, saisi manuellement par la direction.
2. Le type `eleve` possède un champ personnalisé `classe_id`, renseigné à l'inscription.
3. La colonne calculée additionne, pour chaque classe affichée, le nombre d'élèves dont `classe_id` correspond.

## 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 );
}
```

> L'essentiel à retenir : Une colonne calculée évite d'ouvrir chaque fiche classe une à une ; manage_posts_columns et manage_posts_custom_column suffisent ; Le calcul repose sur une simple comptabilisation de wp_count_posts filtrée

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