# Un script qui archive un site e-learning inactif sans perdre les certificats

> Automatiser l'archivage d'un site pédagogique inactif tout en conservant les preuves de complétion des apprenants.

- Auteur : WordPress Développement
- Publié le : 2023-02-09
- Mis à jour le : 2023-02-09
- Catégorie : Outils &amp; workflow
- URL : https://www.wpmoderne.fr/outils/script-archive-elearning-inactif-certificats/

## L’essentiel

- L'archivage ne doit jamais toucher aux preuves de complétion
- Un export structuré vaut mieux qu'une sauvegarde brute
- Le site reste consultable pour l'historique

`wp site archive` n'existe pas nativement pour ce qu'on cherchait à faire : un client proposant des formations en ligne a suspendu l'activité de l'une de ses plateformes de cours après la fin d'un cycle de financement, sans certitude de la relancer un jour. Le site restait cependant une preuve légale pour deux mille quatre cents apprenants ayant obtenu un certificat de complétion au fil des huit mois précédents, des documents qu'il fallait pouvoir produire en cas de contrôle ou de demande d'un ancien apprenant, même des années plus tard.

Éteindre purement et simplement le serveur n'était pas une option acceptable : au-delà du risque de perte de données, cela aurait rendu impossible toute vérification ultérieure d'un certificat par un tiers (employeur, organisme de formation). Il fallait un script qui distingue clairement ce qui peut être archivé de façon compacte de ce qui doit rester consultable et vérifiable sans dégradation.

## Identifier ce qui doit absolument rester intact

Sur ce LMS construit avec LearnDash, les certificats de complétion sont générés dynamiquement à la demande à partir de données stockées en meta de commande utilisateur, et non stockés en fichiers PDF statiques. Archiver uniquement les fichiers du site sans la base de données aurait rendu ces certificats impossibles à régénérer. La première étape du script consiste donc à exporter, avant toute autre opération, l'ensemble des données de complétion dans un format indépendant du thème et des extensions.

```
wp db query "
  SELECT u.user_email, um.meta_value AS completion_data
  FROM wp_usermeta um
  JOIN wp_users u ON u.ID = um.user_id
  WHERE um.meta_key = 'learndash_course_completed_1042'
" --path=/var/www/elearning-client > export-certificats-cours-1042.csv
```

## Générer les PDF de certificats avant l'extinction

Plutôt que de compter sur la capacité future du site archivé à régénérer les PDF à la demande (ce qui suppose de maintenir PHP et les extensions à jour indéfiniment), le script génère et sauvegarde chaque certificat en PDF statique pour les deux mille quatre cents apprenants concernés, avant l'archivage. Cette génération s'appuie sur la fonction d'export PDF déjà fournie par l'extension de certification, appelée en boucle via un script WP-CLI personnalisé.

> L'essentiel à retenir : L'archivage ne doit jamais toucher aux preuves de complétion ; Un export structuré vaut mieux qu'une sauvegarde brute ; Le site reste consultable pour l'historique

```
<?php
// wp eval-file generate-certificats.php
$users = get_users(['meta_key' => 'learndash_course_completed_1042']);
foreach ($users as $user) {
    $pdf_path = learndash_certificate_generate($user->ID, 1042);
    if ($pdf_path) {
        copy($pdf_path, '/var/backups/certificats/' . $user->user_email . '.pdf');
        WP_CLI::log("Certificat sauvegarde pour {$user->user_email}");
    } else {
        WP_CLI::warning("Echec de generation pour {$user->user_email}");
    }
}
```

## Basculer le site en lecture seule plutôt que l'éteindre

Une fois les certificats sécurisés en double (base de données exportée et PDF générés), le site n'a pas été supprimé mais basculé en mode lecture seule : désactivation des extensions de paiement et d'inscription, blocage des formulaires de connexion pour les nouveaux comptes, mais maintien de l'accès en consultation pour les apprenants déjà inscrits souhaitant retrouver leur certificat depuis leur espace personnel.

- Les extensions de paiement et de création de compte sont désactivées via `wp plugin deactivate`, listées explicitement plutôt que désactivées en masse.
- Un bandeau d'information ajouté au thème indique que les inscriptions sont suspendues, sans donner l'impression d'un site abandonné.
- Les sauvegardes automatiques restent actives mais leur fréquence passe de quotidienne à hebdomadaire, suffisant pour un site qui ne reçoit plus d'écriture.

## Documenter la procédure de restauration complète

Un site archivé de cette façon n'a de valeur que si quelqu'un, des mois plus tard, sait comment vérifier un certificat ou relancer les inscriptions. Le script produit en sortie un fichier de documentation daté, listant l'emplacement de l'export de complétion, celui des PDF de certificats, la liste des extensions désactivées et la marche à suivre pour réactiver le site si le client relance le cycle de formation.

> Un site qu'on archive n'est jamais vraiment terminé tant que quelqu'un peut encore avoir besoin d'une preuve qu'il contenait. Le vrai travail d'archivage commence par identifier cette preuve avant de toucher au reste.

## Notre retour d'expérience

Cette approche a demandé environ une journée de travail supplémentaire par rapport à une simple extinction de serveur, pour un bénéfice qui ne se mesure que le jour où un ancien apprenant recontacte le client pour retrouver un certificat perdu. Ce jour-là, la différence entre une sauvegarde brute difficile à exploiter et un export structuré avec PDF pré-générés change tout le temps de réponse.
