Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

Trier la liste des cours e-learning par taux de complétion moyen

Ajouter une colonne triable dans l'administration pour repérer rapidement les cours qui décrochent le plus d'apprenants, sans extension supplémentaire.

Par WordPress Développement • 22 mai 2022 • 4 min de lecture • Aucun commentaire
Trier la liste des cours e-learning par taux de complétion moyen

Comment repérer, parmi cent-cinquante cours d’une plateforme e-learning, les dix qui perdent le plus d’apprenants en cours de route ? Avant cette évolution, la seule réponse possible consistait à ouvrir chaque fiche cours une par une pour consulter son taux de complétion — une méthode qui décourageait précisément le suivi qu’elle était censée permettre.

La plateforme stockait déjà, pour chaque inscription à un cours, un pourcentage de progression en champ personnalisé sur le CPT inscription_cours. Il ne restait qu’à agréger cette donnée existante et l’exposer directement dans la liste d’administration des cours, sous forme de colonne triable — sans toucher au calcul de progression lui-même, déjà en place.

Étape 1 : ajouter la colonne à la liste des cours

Le hook manage_{post_type}_posts_columns permet d’insérer une colonne personnalisée dans la liste d’administration d’un CPT, ici juste après la colonne du titre :

function wpm_colonne_completion( $colonnes ) {
    $nouvelles = array();

    foreach ( $colonnes as $cle => $libelle ) {
        $nouvelles[ $cle ] = $libelle;
        if ( 'title' === $cle ) {
            $nouvelles['completion_moyenne'] = 'Complétion moyenne';
        }
    }

    return $nouvelles;
}
add_filter( 'manage_cours_posts_columns', 'wpm_colonne_completion' );

Étape 2 : calculer et afficher la valeur

L'essentiel à retenir : Colonne personnalisée ajoutée à la liste des cours ; Triable via les hooks natifs de colonnes ; Calcul basé sur les données de progression déjà stockées
function wpm_afficher_completion( $colonne, $post_id ) {
    if ( 'completion_moyenne' !== $colonne ) {
        return;
    }

    $inscriptions = get_posts( array(
        'post_type'      => 'inscription_cours',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array( 'key' => 'cours_id', 'value' => $post_id ),
        ),
    ) );

    if ( empty( $inscriptions ) ) {
        echo '—';
        return;
    }

    $total = 0;
    foreach ( $inscriptions as $inscription ) {
        $total += (int) get_post_meta( $inscription->ID, 'progression', true );
    }

    $moyenne = round( $total / count( $inscriptions ) );
    update_post_meta( $post_id, 'completion_moyenne_cache', $moyenne );

    echo $moyenne . ' %';
}
add_action( 'manage_cours_posts_custom_column', 'wpm_afficher_completion', 10, 2 );

Le calcul stocke volontairement son résultat dans un champ completion_moyenne_cache, réutilisé à l’étape suivante pour permettre le tri sans recalculer la moyenne de chaque cours à chaque clic sur l’en-tête de colonne.

Étape 3 : rendre la colonne triable

Deux hooks supplémentaires suffisent à activer le tri, en s’appuyant sur le champ mis en cache plutôt que sur un calcul à la volée :

add_filter( 'manage_edit-cours_sortable_columns', function( $colonnes ) {
    $colonnes['completion_moyenne'] = 'completion_moyenne';
    return $colonnes;
} );

add_action( 'pre_get_posts', function( $query ) {
    if ( ! is_admin() || 'completion_moyenne' !== $query->get( 'orderby' ) ) {
        return;
    }

    $query->set( 'meta_key', 'completion_moyenne_cache' );
    $query->set( 'orderby', 'meta_value_num' );
} );

Étape 4 : rafraîchir le cache régulièrement

La moyenne mise en cache ne se met à jour qu’à l’affichage de la liste des cours — ce qui suffit largement pour un usage de suivi hebdomadaire par l’équipe pédagogique. Un rafraîchissement plus systématique, déclenché à chaque mise à jour de progression d’un apprenant, resterait possible mais nettement plus coûteux en requêtes pour un bénéfice marginal sur ce cas d’usage précis.

  • Cache recalculé à chaque affichage de la liste d’administration
  • Tri fiable, basé sur une valeur stockée plutôt que recalculée à chaque clic
  • Aucune modification du calcul de progression individuel des apprenants

Ajouter un repère visuel sur les valeurs critiques

Un simple pourcentage affiché dans une colonne reste facile à ignorer au milieu d’une longue liste. Une petite adaptation a consisté à colorer le texte en orange lorsque la moyenne de complétion descend sous 40 %, directement dans la fonction d’affichage de la colonne, sans dépendance à une bibliothèque graphique externe. Ce repère minimal a suffi à ce que l’équipe pédagogique remarque d’un coup d’œil les cours qui méritaient une attention particulière, sans avoir à trier systématiquement la liste à chaque visite.

En résumé

Trois hooks natifs de colonnes d’administration — ajout, affichage, tri — suffisent à transformer une donnée déjà stockée en outil de pilotage exploitable par l’équipe pédagogique, sans reconstruire le système de suivi de progression existant.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi