takt

WordPress

Le plugin WordPress vskstudio/takt-wordpress emballe le cœur PHP sous forme de plugin clé en main : il injecte le snippet dans wp_head et — quand WooCommerce est actif — remonte les commandes terminées en événements d'achat serveur-à-serveur. Nécessite WordPress 6.0+ et PHP 8.1+. Cette page décrit la version 0.3.1.

Installation

Le plugin est livré en ZIP autonome — pas de composer install sur le serveur. Télécharge takt-analytics.zip depuis la dernière release, puis dans Extensions → Ajouter → Téléverser une extension, dépose-le et active-le.

wp plugin install takt-analytics.zip --activate

Toutes les dépendances (le cœur PHP et sa pile PSR-7) sont préfixées sous Takt\WP\Vendor\ : le plugin n’entre jamais en conflit avec les librairies d’une autre extension. Les requêtes serveur-à-serveur passent par le wp_remote_post natif de WordPress — aucun client HTTP embarqué.

Configuration

Tout se règle dans Réglages → Takt Analytics :

RéglageDescription
DomaineL’identifiant du site envoyé avec chaque événement (ex. exemple.fr).
Mode du scriptinline (snippet embarqué, anti-adblock), cdn (jsDelivr), asset (fichier que tu héberges) ou sdk (module ES — seul mode qui accepte les chemins exclus et le nettoyage d’URL).
Origine du scriptOrigine first-party qui sert le runtime du tracker ; l’ingestion navigateur passe alors par cette origine plutôt que par le domaine Takt.
Exclure localhostNe pas suivre les hôtes locaux. Décochée par défaut : coche-la explicitement, sinon le trafic localhost et consorts est compté.
Clics sortants / Téléchargements / Événements balisés / Pages 404Bascules d’autocapture du tracker navigateur.
Extensions téléchargeablesRestreint les téléchargements comptés à ces extensions (pdf, zip, docx). Vide = liste par défaut du tracker.
Taux d’échantillonnageFraction des hits envoyés, entre 0 et 1 (0.5). Vide = tout est envoyé.
Conserver la query stringGarde la query string et le hash dans l’URL enregistrée ; sinon ils sont retirés.
Paramètres de requête conservésAllowlist de paramètres conservés (utm_source, utm_medium).
Chemins exclus du suivi (mode SDK)Préfixes de chemin jamais suivis (/app, /account). Ignoré hors mode sdk.
Ignorer Do-Not-TrackCesse de respecter le signal Do Not Track du navigateur.
Suspendre le suiviCoupe-circuit : le snippet est rendu mais n’envoie plus rien.
Suivi WooCommerce (achats)Envoyer un événement d’achat quand une commande atteint le statut déclencheur.
Déclencheur de la commandeStatut de commande qui déclenche l’achat (Terminée ou En traitement).
Endpoint d’ingestionL’origine d’ingestion Takt, sans chemin — https://taktlytics.com pour le service hébergé. Le plugin ajoute lui-même /api/event. Sert aux événements serveur-à-serveur uniquement.
Clé APIJeton Bearer pour les événements S2S — champ en écriture seule.
N'écris pas https://taktlytics.com/api/event dans Endpoint d'ingestion : l'URL d'envoi deviendrait …/api/event/api/event et les achats ne seraient jamais reçus, sans message d'erreur.

En mode asset, le snippet pointe vers /takt/takt.auto.js (préfixé par Origine du script si elle est renseignée) : c’est à toi de déposer ce fichier à cette URL, le plugin ne le sert pas.

Clé API via wp-config.php

Pour les environnements où les secrets ne doivent pas vivre en base, définis la clé en constante. Elle prime sur la valeur stockée, et le champ admin est désactivé (grisé, non soumis) avec une note indiquant que la clé vient de la constante :

define('TAKT_API_KEY', 'ta-cle');

Nettoyage d’URL via wp-config.php

La réécriture d’URL est une fonction JS brute injectée verbatim dans la page : elle reste contrôlée par le dev et se définit elle aussi en constante, jamais depuis l’admin. Elle n’a d’effet qu’en mode sdk :

define('TAKT_SCRUB_URL', '(u) => u.split("#")[0]');

CSP

Le filtre takt_snippet_nonce fournit le nonce CSP posé sur la balise <script> du snippet — indispensable en mode inline (le mode par défaut) sous une politique script-src stricte :

add_filter('takt_snippet_nonce', fn () => my_csp_nonce());

Achats WooCommerce (serveur-à-serveur)

Le suivi des achats ne démarre que si les quatre conditions sont réunies : WooCommerce actif, bascule Suivi WooCommerce cochée, Endpoint d’ingestion renseigné et Clé API renseignée. S’il en manque une, le plugin n’accroche simplement pas le hook, sans message d’erreur.

Le plugin écoute alors woocommerce_order_status_changed et émet un événement Purchase avec le revenu depuis ton serveur — les ventes sont donc suivies même quand la commande se termine hors-session (callback de paiement, admin, cron), là où un snippet navigateur ne peut pas se déclencher :

// Émis par le plugin au statut déclencheur :
$takt->withVisitor($order->get_customer_ip_address(), $order->get_customer_user_agent())
     ->event('Purchase', ['order_id' => '1234', 'items' => '2'], new Revenue('99.90', 'EUR'));

Les classes du cœur sont renommées sous Takt\WP\Vendor\ dans le ZIP publié : cet extrait illustre ce que le plugin envoie, il n’est pas réutilisable tel quel depuis un thème.

L’IP et l’User-Agent du client issus de la commande sont forwardés pour l’attribution. Chaque commande n’est comptée qu’une fois : le plugin marque la commande d’un méta _takt_tracked, pour qu’un hook de statut ré-entrant (processingcompleted, double clic en admin, extension qui re-sauve la commande) ne remonte jamais deux fois le même achat. Le client S2S avale les erreurs de transport par défaut : un événement en échec ne casse jamais le tunnel d’achat.

WooCommerce est optionnel — il n'est requis que pour le suivi des achats (revenu). Le snippet navigateur fonctionne sur n'importe quel site WordPress.

Vie privée

Les événements d’achat sont envoyés depuis ton serveur vers l’origine d’ingestion Takt et incluent l’IP et l’User-Agent du client pour l’attribution. Ils sont forwardés, jamais journalisés par le plugin. Le tracker navigateur respecte Do Not Track et un opt-out takt_ignore en localStorage.