Files
2026-05-12 23:34:00 +02:00

4.9 KiB

thalim-newsletter

Plugin WordPress qui compose les newsletters mensuelles du laboratoire THALIM à partir du contenu déjà publié sur le site, et les exporte en HTML prêt pour un envoi email.

  • Version : 1.0.0
  • Auteur : THALIM Dev
  • Licence : GPL v2 or later

Installation

cd wp-content/plugins
git clone gitea@figureslibres.io:valentin_le_moign/thalim-plugin-newsletter.git thalim-newsletter

Puis activer depuis l'admin WordPress. Dans le cadre du projet THALIM, le clonage est automatisé par bootstrap.sh du repo thalim-stack.

Utilisation

Une fois activé, le plugin ajoute une page d'administration : Outils → Newsletter (capacité requise : edit_others_posts).

Le workflow :

  1. Sélection d'un mois (sélecteur année-mois)
  2. Chargement AJAX (thalim_nl_load_month) des contenus éligibles, regroupés par catégorie parente
  3. Cases à cocher pour inclure ou exclure chaque publication / séance
  4. Champs intro, conclusion, URL d'inscription, URL de désinscription
  5. Sauvegarde : crée un post WordPress dans la catégorie Newsletter (20) avec le HTML email complet en post_content
  6. Bouton Exporter en HTML (thalim_nl_export_html) → téléchargement du fichier newsletter-THALIM-{mois}.html

Une liste des newsletters déjà sauvegardées permet de revenir éditer un mois passé.

Fenêtres d'éligibilité par catégorie

Les contenus pertinents d'un mois donné ne sont pas seulement « les posts publiés ce mois-ci » — chaque catégorie a sa propre logique de fenêtre temporelle (cf. WINDOW_TYPES dans includes/class-post-query.php) :

Catégorie Fenêtre
Appels (8), Soutenances (14) datetime_to_fin (du datetime à date_de_fin)
Colloques (10), Séminaires (11) debut_minus35_to_fin (de date_de_debut - 35j à date_de_fin)
Ouvrages (15), Articles (16) datetime_plus3m (du datetime à datetime + 3 mois)
Toutes les autres datetime_plus35d (du datetime à datetime + 35 jours)

Quand datetime (ou date_de_debut) est vide, le post_date sert de fallback. Cette logique permet par ex. à un appel à communication d'apparaître dans toutes les newsletters jusqu'à sa date de fin.

Catégories couvertes

La liste des catégories éligibles n'est pas codée en dur dans le plugin — elle est calculée dynamiquement via Thalim_NL_Post_Query::get_eligible_categories() (toutes les catégories WordPress, groupées par parent). Les constantes en haut de thalim-newsletter.php (THALIM_NL_CAT_APPELS = 8, etc.) ne servent qu'à associer les fenêtres temporelles spéciales aux catégories concernées :

Constante ID Description
THALIM_NL_CAT_APPELS 8 Appels
THALIM_NL_CAT_COLLOQUES 10 Colloques
THALIM_NL_CAT_SEMINAIRES 11 Séminaires
THALIM_NL_CAT_COMMS 13 Communications
THALIM_NL_CAT_SOUTENANCES 14 Soutenances
THALIM_NL_CAT_OUVRAGES 15 Ouvrages
THALIM_NL_CAT_ARTICLES 16 Articles
THALIM_NL_CAT_NEWSLETTER 20 Newsletter (catégorie où sont sauvegardés les digests)

IDs vérifiés en DB le 2026-03-20. À mettre à jour en cas de migration ou de réorganisation des taxonomies.

Format HTML email

includes/class-html-exporter.php génère un HTML compatible clients mail :

  • Layout table-based, largeur 600 px
  • Styles inline sur tous les éléments
  • Polices : Gelasio (Google Fonts @import, fallback Georgia) pour les titres, Arial/Helvetica pour le corps
  • Media queries pour le rendu mobile
  • Preheader caché (texte d'aperçu dans les boîtes mail)

Le HTML complet est généré à la sauvegarde et stocké tel quel dans post_content — l'export se contente de le renvoyer.

Prérequis

  • WordPress 6.0+
  • PHP 7.4+
  • Plugin Pods (le pod post et son champ catégorie pour la triple écriture)

Structure

.
├── thalim-newsletter.php       # point d'entrée, constantes, bootstrap
├── assets/
│   ├── admin.css                 # styles de la page admin
│   └── admin.js                  # interactions (sélecteur mois, cases, export)
└── includes/
    ├── class-post-query.php      # requêtes SQL custom + fenêtres temporelles par catégorie
    ├── class-html-exporter.php   # génération du HTML email (tables, inline styles)
    └── class-admin-page.php      # UI Tools > Newsletter + handlers AJAX + sauvegarde