HamAnalyst Stats
WordPress GA4 dashboard plugin – OAuth2, zero dependencies
by HamAnalyst · github.com/albertm-hub/hamanalyst-stats · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/albertm-hub/hamanalyst-stats/archive/refs/heads/main.zipTableau de bord Google Analytics 4 pour WordPress — authentification OAuth2, zéro dépendance externe.

Fonctionnalités
| Widget | Description |
|---|---|
| Compteurs KPI | Visiteurs uniques · Sessions · Pages vues sur 30 jours avec comparaison mois précédent |
| Activité quotidienne | Courbe Chart.js des sessions sur les 30 derniers jours |
| OS / Plateformes | Camembert Windows / Linux / Android / iOS / Macintosh |
| Top 10 pages | Tableau titre + vues + tendance vs mois précédent |
| Provenance pays | Drapeaux emoji + barre de progression relative |
| Temps réel | Utilisateurs actifs, rafraîchi toutes les 60 secondes |
Points techniques
- Authentification OAuth2 Authorization Code Flow (aucun Service Account requis)
- Refresh token chiffré AES-256-CBC dans
wp_options - Appels API via
wp_remote_post— aucune bibliothèque PHP externe - Cache WP transients 1 heure, bouton "Vider le cache"
- Thème sombre natif — fonctionne dans l'admin WP sans conflit CSS
- Nonces WP sur tous les formulaires et requêtes AJAX
- Compatible PHP 7.4+ et WordPress 5.6+
Captures d'écran
Dashboard (cliquer pour voir)Le dashboard affiche les 6 widgets en temps réel avec thème sombre.
Page SettingsUpload du fichier JSON OAuth2, bouton "Connecter avec Google", statut de connexion.
Prérequis
- WordPress ≥ 5.6
- PHP ≥ 7.4 avec extensions
openssl,json,mbstring - Un projet Google Cloud avec l'API Google Analytics Data API activée
- Une propriété Google Analytics 4 (GA4)
Installation
1. Télécharger le plugin
Via Git
cd wp-content/plugins/
git clone https://github.com/hamanalyst/hamanalyst-stats.git
Via ZIP
Téléchargez la dernière release et décompressez dans wp-content/plugins/hamanalyst-stats/.
Aucun
composer installrequis — le plugin utilise uniquement les fonctions natives WordPress.
2. Activer le plugin
Extensions → Activer sur HamAnalyst Stats.
À l'activation, le répertoire wp-content/uploads/hamanalyst/ est créé avec un .htaccess bloquant tout accès HTTP direct.
Configuration OAuth2
Étape 1 — Créer les credentials Google
- Ouvrez Google Cloud Console et sélectionnez votre projet.
- APIs & Services → Bibliothèque → recherchez Google Analytics Data API → Activer.
- APIs & Services → Identifiants → Créer des identifiants → ID client OAuth 2.0.
- Type d'application : Application Web.
- Nom :
HamAnalyst Stats(ou autre). - URI de redirection autorisée — ajoutez exactement :
https://votre-site.com/wp-admin/admin.php?page=hamanalyst-stats-settings - Cliquez Créer puis Télécharger JSON.
Si l'écran de consentement OAuth n'est pas configuré, Google vous demandera de le faire avant. En mode "Test", ajoutez votre adresse Gmail en tant qu'utilisateur test.
Étape 2 — Configurer le plugin
- HamAnalyst Stats → Settings dans l'admin WordPress.
- Renseignez le GA4 Property ID (ex :
518606718).
(Trouvable dans Google Analytics → Admin → Détails de la propriété) - Uploadez le fichier JSON téléchargé à l'étape précédente.
- Cliquez Sauvegarder.
Étape 3 — Connecter Google
- Cliquez Connecter avec Google.
- Choisissez le compte Google qui a accès à votre propriété GA4.
- Autorisez l'accès en lecture à Google Analytics.
- Vous êtes redirigé vers Settings avec le message "Connexion Google réussie !".
Étape 4 — Voir les statistiques
HamAnalyst Stats → Dashboard — les données s'affichent immédiatement.
Structure du projet
hamanalyst-stats/
├── hamanalyst-stats.php # Point d'entrée WordPress
├── composer.json # Métadonnées (aucune dépendance externe)
│
├── includes/
│ ├── class-ga4-oauth.php # OAuth2 : auth URL, callback, refresh, chiffrement
│ ├── class-ga4-client.php # GA4 Data API v1beta (REST pur via wp_remote_post)
│ └── class-cache.php # Cache WP transients
│
├── admin/
│ ├── settings.php # Page paramètres : upload JSON, connexion OAuth
│ └── dashboard.php # Dashboard : 6 widgets
│
└── assets/
├── css/style.css # Thème sombre
└── js/charts.js # Chart.js + polling temps réel
Architecture OAuth2
┌─────────────────────────────────────────────────────────────────┐
│ Flow d'autorisation │
├─────────────────────────────────────────────────────────────────┤
│ │
│ [Settings] ──"Connecter"──► accounts.google.com/o/oauth2/auth │
│ │ │
│ scope: analytics.readonly │
│ access_type: offline │
│ prompt: consent │
│ │ │
│ [admin_init] ◄──── redirect ?code=... + state=nonce ────────── │
│ │ │
│ ├── Vérifie le nonce WP (state) │
│ ├── POST oauth2.googleapis.com/token │
│ ├── Reçoit access_token + refresh_token │
│ ├── Chiffre en AES-256-CBC (clé = AUTH_KEY + SECURE_AUTH_KEY) │
│ └── Stocke dans wp_options (autoload = false) │
│ │
│ [Appel API] ──► get_access_token() │
│ ├── Token valide ? → utilise access_token en cache │
│ └── Token expiré ? → POST /token (grant: refresh_token) │
│ │
└─────────────────────────────────────────────────────────────────┘
Sécurité
| Mesure | Détail |
|---|---|
| Nonces WP | Tous les formulaires et requêtes AJAX |
| Capability check | manage_options requis sur chaque page et handler AJAX |
| Chiffrement tokens | AES-256-CBC, clé dérivée des WP secret keys (AUTH_KEY + SECURE_AUTH_KEY) |
| JSON protégé | Stocké dans wp-content/uploads/hamanalyst/ avec .htaccess Deny from all |
| State OAuth2 | Nonce WordPress vérifié au retour du flow Google |
| Output buffering | ob_start() sur les handlers AJAX pour éviter toute corruption JSON |
Dépannage
Erreur "redirect_uri_mismatch"L'URI de redirection dans Google Cloud Console ne correspond pas exactement à celle du plugin.
Copiez l'URI affichée dans Settings (section "Comment créer les credentials") et collez-la dans Google Cloud Console → Identifiants → votre client OAuth → URI de redirection autorisée.
Google ne retourne pas de refresh_tokenLe refresh_token est uniquement retourné lors de la première autorisation, ou quand prompt=consent est forcé. Si vous avez déjà autorisé l'application :
- Allez sur myaccount.google.com/permissions.
- Révoquez l'accès à "HamAnalyst Stats".
- Cliquez à nouveau sur "Connecter avec Google".
Le compte Google utilisé pour l'OAuth n'a pas accès à la propriété GA4.
Google Analytics → Admin → Gestion des accès à la propriété → ajoutez votre adresse email avec le rôle Lecteur.
Le dashboard affiche des données vides- Vérifiez que le Property ID correspond bien à une propriété GA4 (pas Universal Analytics).
- GA4 ne remonte pas de données pour les jours sans trafic — c'est normal.
- Videz le cache (bouton en haut à droite du dashboard).
L'extension OpenSSL PHP n'est pas chargée. Dans ce cas, les tokens sont stockés en base64 non chiffré (fallback automatique). Activez l'extension openssl dans votre php.ini pour un stockage sécurisé.
Développement
# Cloner
git clone https://github.com/hamanalyst/hamanalyst-stats.git
cd hamanalyst-stats
# Aucune installation de dépendance requise
# Le plugin utilise uniquement WordPress core + WP HTTP API
Tests manuels
| Scénario | Vérification |
|---|---|
| Premier lancement | Page Settings → "Uploadez d'abord le fichier JSON" |
| JSON uploadé, non connecté | Bouton "Connecter avec Google" visible |
| Flow OAuth complet | Message flash "Connexion Google réussie !" |
| Token expiré | Refresh automatique sans action utilisateur |
| Vider le cache | Toast "Cache vidé." + rechargement des données |
| Déconnecter | Statut revient à "Non connecté" |
Contribuer
Les contributions sont les bienvenues.
- Forkez le dépôt
- Créez une branche :
git checkout -b feature/ma-fonctionnalite - Committez :
git commit -m 'feat: description' - Pushez :
git push origin feature/ma-fonctionnalite - Ouvrez une Pull Request
Style de code
- PSR-12 pour PHP
- Préfixe
hamanalyst_sur toutes les fonctions globales - Classes préfixées
HamAnalyst_ - Nonces WP obligatoires sur tout formulaire / AJAX
Changelog
Voir CHANGELOG.md.
Licence
GPL-2.0-or-later — voir LICENSE.
Développé pour HamAnalyst.org — L'assistant IA pour radioamateurs.