Title: PixLedger
Author: mentotex
Published: <strong>June 24, 2026</strong>
Last modified: June 24, 2026

---

Search plugins

![](https://ps.w.org/pixledger/assets/banner-772x250.png?rev=3584518)

![](https://ps.w.org/pixledger/assets/icon-256x256.png?rev=3584518)

# PixLedger

 By [mentotex](https://profiles.wordpress.org/mentotex/)

[Download](https://downloads.wordpress.org/plugin/pixledger.1.6.4.zip)

 * [Details](https://wordpress.org/plugins/pixledger/#description)
 * [Reviews](https://wordpress.org/plugins/pixledger/#reviews)
 *  [Installation](https://wordpress.org/plugins/pixledger/#installation)
 * [Development](https://wordpress.org/plugins/pixledger/#developers)

 [Support](https://wordpress.org/support/plugin/pixledger/)

## Description

PixLedger fires your Meta Pixel, GA4, and GTM events AND logs every single event
locally — so you always know what was tracked, what failed, what was blocked by 
consent, and why.

**The Event Intelligence Layer**

Every event that fires through PixLedger is recorded in your own database with a
full audit trail: which provider received it, whether it was delivered successfully,
whether it was blocked by consent, and the complete payload that was sent.

#### What PixLedger Tracks

**WooCommerce Events**
 * ViewContent — product page visits * AddToCart — cart additions
with product data * RemoveFromCart — cart removals * CartView — cart page visits*
InitiateCheckout — checkout page visits * AddPaymentInfo — payment details entered*
AddShippingInfo — shipping details entered * CouponApplied — discount codes applied*
Purchase — completed orders with full order data * OrderRefunded — refunds issued*
ProductReview — WooCommerce product reviews submitted

**Universal WordPress Events (works on any WordPress site)**
 * PageView — every
frontend page load with page context * NotFound404 — 404 errors with requested URL*
OutboundLinkClick — clicks on external links * PhoneClick — clicks on tel: links*
EmailClick — clicks on mailto: links * DownloadClick — clicks on downloadable files(
PDF, ZIP, DOC, etc.) * FormSubmit — any form submission * UserLogin — user login
events * UserRegister — new user registrations * CommentPosted — comment submissions*
SearchPerformed — site search queries * SearchEmpty — searches with zero results

**Custom Events**
 * Declarative: add `data-pxl-event="EventName"` to any HTML element—
no code needed * Programmatic: `pxl('track', 'EventName', { properties })` for developers

#### Supported Providers

 * **Meta Pixel** — browser-side pixel events with advanced matching (hashed email)
 * **Google Analytics 4** — GA4 ecommerce events with full items array
 * **Google Tag Manager** — dataLayer pushes in GA4 Enhanced Ecommerce schema

#### Key Features

**Event Log**
 A real-time, searchable log of every event that fires on your site.
See exactly what was tracked, by which provider, with what payload. Filter by provider,
event name, status, or date. Paginated with bulk delete and auto-refresh.

**Event Configuration Panel**
 Choose exactly which events PixLedger tracks. Enable
or disable any event individually. Defaults are sensible out of the box — turn off
what you don’t need, enable what you do.

**Consent Mode v2**
 Built-in Consent Mode v2 support. Events are blocked at the
pipeline level when consent is denied — not as an afterthought. The Event Log shows
blocked events with the specific consent category that denied them.

**Tag Detection**
 PixLedger detects if Meta Pixel, GA4, or GTM are already loaded
by another plugin or your theme. It skips its own injection automatically to prevent
duplicate events. Detection notices are shown in Settings.

**Visitor ID Tracking**
 Every event is tagged with an anonymous visitor ID (90-
day cookie) so you can trace a visitor’s journey across sessions. Visible in the
Event Log — clickable journey view available in Pro.

**Attribution Capture**
 UTM parameters, click IDs (fbclid, gclid, ttclid, msclkid),
landing page, and referrer are captured on every page load and saved to the order
on purchase.

**Rate Limiting**
 Configurable rate limiting prevents spam bots from flooding your
event log. Default: 5 same-event repetitions per visitor per minute. Adjustable 
in Settings.

#### Works on Any WordPress Site

PixLedger works with or without WooCommerce. Universal events (PageView, clicks,
forms, search, user account events) fire on any WordPress site. WooCommerce ecommerce
events load automatically when WooCommerce is detected.

#### Privacy & GDPR

 * Customer emails are SHA-256 hashed before storage — never stored in plain text
 * Visitor IDs are anonymous — no personally identifiable information
 * Form field values are never captured — only form metadata
 * Event log retention is fully configurable (minimum 1 hour, default 7 days, no
   upper limit)
 * Full data removal on plugin deletion via uninstall.php

#### PixLedger Pro

PixLedger Pro adds server-side tracking, advanced analytics, and journey intelligence:

 * **Meta Conversions API (CAPI)** — server-side events that bypass ad blockers
 * **GA4 Measurement Protocol** — server-side GA4 events
 * **Google Ads Enhanced Conversions** — server-side conversion API
 * **Reconciliation Dashboard** — compare platform-reported conversions vs actual
   WooCommerce data
 * **Attribution Dashboard** — first-touch, last-touch, and multi-touch attribution
   reports
 * **Visitor Journey Intelligence** — click any visitor ID to see their complete
   event timeline
 * **Product Journey View** — see the last N journeys that led to buying a specific
   product
 * **Advanced Event Log** — extended date range, CSV/JSON export
 * **Additional platforms** — TikTok, Pinterest, Microsoft Bing, and more

Learn more at [pixledger.com](https://pixledger.com).

### External Services

PixLedger connects to the following third-party services to deliver tracking events
to advertising and analytics platforms. These connections only occur when the respective
provider is enabled and configured in Settings.

#### Meta Pixel

PixLedger loads the Meta Pixel script (`fbevents.js`) from `connect.facebook.net`
and sends ecommerce and page events to Meta on every relevant page load. This occurs
only when Meta Pixel is enabled and a Pixel ID is configured. Data sent includes
event names, page URLs, and hashed customer email (for advanced matching). No data
is sent if Meta Pixel is disabled in Settings.

 * [Meta Privacy Policy](https://www.facebook.com/privacy/policy/)
 * [Meta Terms of Service](https://www.facebook.com/legal/terms)

#### Google Analytics 4

PixLedger loads the GA4 script (`gtag.js`) from `googletagmanager.com` and sends
ecommerce and page events to Google Analytics on every relevant page load. This 
occurs only when GA4 is enabled and a Measurement ID is configured. Data sent includes
event names, page URLs, and ecommerce data (product names, prices, order values).
No data is sent if GA4 is disabled in Settings.

 * [Google Privacy Policy](https://policies.google.com/privacy)
 * [Google Terms of Service](https://policies.google.com/terms)

#### Google Tag Manager

PixLedger loads the GTM container script (`gtm.js`) from `googletagmanager.com` 
and pushes events to the `window.dataLayer` object. This occurs only when GTM is
enabled and a Container ID is configured. The data pushed includes event names and
ecommerce data in GA4 Enhanced Ecommerce schema. No script is loaded if GTM is disabled
in Settings, or if GTM is already loaded by another plugin or your theme.

 * [Google Privacy Policy](https://policies.google.com/privacy)
 * [Google Terms of Service](https://policies.google.com/terms)

## Installation

#### Minimum Requirements

 * WordPress 6.3 or higher
 * PHP 8.1 or higher
 * WooCommerce 7.0 or higher (optional — plugin works on any WordPress site)

#### Automatic Installation

 1. Go to **Plugins  Add New** in your WordPress admin
 2. Search for **PixLedger**
 3. Click **Install Now** and then **Activate**

#### Manual Installation

 1. Download the plugin zip file
 2. Go to **Plugins  Add New  Upload Plugin**
 3. Upload the zip file and click **Install Now**
 4. Click **Activate Plugin**

#### After Activation

 1. Go to **PixLedger  Settings**
 2. Enter your Meta Pixel ID, GA4 Measurement ID, and/or GTM Container ID
 3. Enable the providers you want to use
 4. Configure the Event Configuration panel to choose which events to track
 5. Visit your store and check **PixLedger  Event Log** to confirm events are firing

## FAQ

### Do I need WooCommerce?

No. PixLedger works on any WordPress site. WooCommerce ecommerce events (ViewContent,
AddToCart, Purchase, etc.) only load when WooCommerce is active. Universal events(
PageView, clicks, forms, search) work on any WordPress site.

### Will PixLedger conflict with my existing Meta Pixel or GA4 setup?

No. PixLedger detects if Meta Pixel, GA4, or GTM are already loaded by another plugin
or your theme. It automatically skips its own script injection to prevent duplicate
events. You’ll see a notice in Settings explaining what was detected.

### Why are some events showing as “Blocked” in the Event Log?

Blocked events are events that were prevented from reaching the provider because
the visitor denied consent. This is Consent Mode v2 working correctly. The status
badge shows the specific consent category that was denied. To test the plugin without
consent blocking, go to Settings and uncheck “Enable Consent Mode”.

### What does the visitor ID look like and where is it stored?

The visitor ID is an anonymous string like `pxl_a3f8c2d1b2e4f6a8` stored in a 90-
day cookie and in the `visitor_id` column of the `wp_pxl_events` database table.
It contains no personally identifiable information.

### Are customer emails stored in plain text?

No. Customer emails are SHA-256 hashed before being stored. The hash is used for
Meta Pixel advanced matching and GA4 enhanced conversions — both platforms accept
hashed emails for customer matching.

### How long are events kept in the database?

By default, PixLedger keeps events for 7 days (168 hours). You can change this in**
Settings  Advanced  Event retention** — set any number of hours with no upper limit.
A WP-Cron job runs hourly and automatically purges older records.

### Can I disable specific events I don’t need?

Yes. The Event Configuration panel in Settings lets you enable or disable any event
individually. Disabling an event means it is never dispatched — no log row, no provider
call, no database write.

### Does PixLedger slow down my site?

No, when configured correctly. The frontend tracker script loads in the footer with`
defer`, uses passive event listeners, throttles high-frequency events, and batches
AJAX requests every 5 seconds (never one request per event). The performance impact
is negligible.

### Where is the data stored?

All event data is stored in your own WordPress database in two tables: `wp_pxl_events`(
all tracked events) and `wp_pxl_attribution` (UTM and click ID data per order). 
Your data never leaves your server — PixLedger does not have access to it.

### What happens to my data if I delete the plugin?

All plugin data is removed on deletion — both database tables (`wp_pxl_events` and`
wp_pxl_attribution`), all plugin options, and all scheduled cron jobs. This is handled
by `uninstall.php`.

### How do I test that Meta Pixel is working?

 1. Enter your Pixel ID in Settings and enable Meta Pixel
 2. Disable Consent Mode in Settings (for testing only)
 3. Visit your store as a logged-out visitor
 4. Open Meta Events Manager  Test Events tool
 5. Enter your store URL and browse — events should appear in real time

### How do I test that GA4 is working?

 1. Enter your Measurement ID (G-XXXXXXXXXX) in Settings and enable GA4
 2. Open Google Analytics  Admin  DebugView
 3. Install the Google Analytics Debugger Chrome extension and enable it
 4. Browse your store — events appear in DebugView within 30 seconds

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“PixLedger” is open source software. The following people have contributed to this
plugin.

Contributors

 *   [ mentotex ](https://profiles.wordpress.org/mentotex/)

[Translate “PixLedger” into your language.](https://translate.wordpress.org/projects/wp-plugins/pixledger)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/pixledger/), check 
out the [SVN repository](https://plugins.svn.wordpress.org/pixledger/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/pixledger/) by [RSS](https://plugins.trac.wordpress.org/log/pixledger/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.6.4

 * Changed: All plugin prefixes renamed from pxl_/PXL_ (3 chars) to pixledger_/PIXLEDGER_(
   9 chars) to comply with WordPress.org prefix requirements
 * Changed: Database tables renamed from wp_pxl_events/wp_pxl_attribution to wp_pxlg_events/
   wp_pxlg_attribution
 * Changed: All hooks, options, AJAX actions, nonces, cookies, script handles, and
   JS globals now use pixledger_ prefix
 * Changed: Removed is_pro event locking — all events in the registry (PageScrolled,
   TimeOnPage, FormAbandoned, UserLogout, VideoStart, VideoComplete) are now fully
   functional in Lite
 * Changed: Removed disabled attribute and Pro badges from Event Configuration toggles—
   all events are now freely configurable
 * Changed: Removed locked Visitor ID and Order ID UI from Event Log
 * Added: PixLedger Pro informational submenu page — lists Pro features with link
   to pixledger.com (no functional code, no license checks)
 * Note: No tracking behavior changes — this release is a compliance and housekeeping
   update

#### 1.6.3

 * Changed: Event retention is now fully unrestricted — no upper cap, configurable
   to any number of hours (default 168h / 7 days)
 * Changed: Event Log display is no longer capped to a fixed window — shows events
   within the configured retention period
 * Changed: Expanded inline sanitize_callback for event toggle settings to explicit
   static function block
 * Removed: All references to Pro-only retention cap from code, comments, and documentation

#### 1.6.2

 * Added: External Services section in readme — documents Meta Pixel, GA4, and GTM
   connections with links to terms and privacy policies per WordPress.org guidelines
 * Changed: Event retention is now configurable in Settings  Advanced (1–720 hours/
   up to 30 days, default 7 days)
 * Changed: Removed comparative marketing claims from plugin description per WordPress.
   org guidelines
 * Note: PixLedger Pro retains unlimited retention (no upper cap, 0 = never delete)

#### 1.6.1

 * Fixed: All output now escaped per WordPress.org coding standards — inline provider
   queue JSON is emitted via wp_json_encode()
 * Fixed: All user input ($_POST, $_COOKIE) sanitised and unslashed inline at the
   point of use
 * Fixed: Database queries hardened — table names composed only from $wpdb->prefix,
   all parameters passed through $wpdb->prepare() with placeholders
 * Changed: Removed deprecated load_plugin_textdomain() call — WordPress.org loads
   translations automatically since WordPress 4.6
 * Changed: Prefixed all global variables in uninstall.php (pxl_ prefix)
 * Changed: Trimmed readme tags to 5 per WordPress.org guidelines
 * Added: phpcs.xml configuration declaring the pxl_ hook/function prefix
 * Note: No functional changes — this release contains only WordPress.org Plugin
   Check compliance fixes

#### 1.6.0

 * Fixed: Duplicate GTM/GA4 events on add-to-cart and remove-from-cart — JS jQuery
   listener now checks PHP PendingEventStore queue before firing, preventing double
   dataLayer pushes after classic WooCommerce redirect
 * Fixed: GTM dataLayer ecommerce key incorrectly set to [] (empty array) for non-
   ecommerce events (PageView, UserLogin, etc.) — ecommerce key is now omitted entirely
   when there is no ecommerce data
 * Fixed: pxlConfig.detection returning empty arrays [] instead of {present, source}
   objects — TagDetector::detect_all() now returns proper object-shaped arrays so
   JS conflict detection works correctly and prevents double GTM/GA4 injection
 * Added: TagDetector::get_detected_names() method for Settings page to retrieve
   plugin display names per tag type
 * Added: EventRegistry — central catalogue of all trackable events with per-event
   enable/disable toggles
 * Added: Event Configuration panel in Settings — enable or disable any event individually,
   grouped by category
 * Added: WPCoreTracker — universal WordPress events (PageView, NotFound404, UserLogin,
   UserRegister, CommentPosted, SearchPerformed, SearchEmpty)
 * Added: TrackEndpoint — AJAX endpoint for client-side events (OutboundLinkClick,
   PhoneClick, EmailClick, DownloadClick, FormSubmit)
 * Added: Universal JS event listeners in tracker.js with event buffering and Beacon
   API flush on page unload
 * Added: enabledEvents map passed to tracker.js so JS events are gated client-side
   before leaving the browser
 * Added: RemoveFromCart, CartView, AddPaymentInfo, AddShippingInfo, CouponApplied,
   OrderRefunded, ProductReview WooCommerce events
 * Changed: “Debug Console” renamed to “Event Log” in all user-facing strings
 * Fixed: EventDispatcher now logs events with status ‘no_provider’ when no providers
   are configured, so Event Log always reflects what fired

#### 1.5.0

 * Added: Provider queue system for GA4, Meta Pixel, and GTM — all three providers
   now use a filter-based queue (pxl_ga4_queued_events, pxl_meta_queued_events, 
   pxl_gtm_queued_events) that dispatches through the full EventDispatcher pipeline
   on the next page load
 * Added: PendingEventStore — cookie-based serialized EventDTO queue for WooCommerce
   redirect events (AddToCart, RemoveFromCart, CouponApplied) that fire during POST
   302 redirects where wp_footer never renders
 * Added: ProductDataEndpoint — AJAX endpoint for fetching product data (price, 
   name, currency) to support immediate event firing on AJAX cart operations (shop/
   category pages)
 * Added: AJAX cart event listeners in tracker.js — added_to_cart and removed_from_cart
   jQuery events fire GA4/Meta/GTM events immediately for AJAX add-to-cart without
   page reload
 * Fixed: WooCommerce redirect events (AddToCart, RemoveFromCart) not reaching GA4,
   Meta Pixel, or GTM providers due to POST  302 redirect preventing wp_footer from
   rendering
 * Changed: Assets.php now outputs all three provider queues in a single wp_footer
   script tag at priority 1

#### 1.4.0

 * Added: GTM provider — push events to window.dataLayer in GA4 Enhanced Ecommerce
   schema with full items array
 * Added: Tag detection — runtime checks for existing Meta Pixel (window.fbq), GA4(
   window.gtag), and GTM (window.google_tag_manager); also detects common plugins(
   GTM4WP, Site Kit); skips injection to prevent duplicates
 * Added: Detection notices in Settings — admin notices explain what was detected
   and which plugin is responsible
 * Fixed: woocommerce_cart_item_removed hook passes WC_Cart object as second parameter—
   removed item now correctly read from $cart->removed_cart_contents[$cart_item_key]

#### 1.3.0

 * Added: Visitor ID system — anonymous 90-day cookie (pxl_visitor_id), visitor_id
   column in wp_pxl_events, get_or_create_visitor_id() in SessionService; attached
   to every EventDTO
 * Added: Object context on every event — object_type, object_id, object_title fields
   on EventDTO; product/page name shown as subtitle under event name in Event Log
 * Added: Reason text for blocked/failed events — EventBlockedByConsentException
   carries the specific consent category denied; EventDispatcher saves reason to
   response_data; shown as tooltip on status badge
 * Added: Event Log pagination — 50 events per page, WordPress-style navigation,
   AJAX refresh respects current page
 * Added: Filtering system — filter by provider, event name, status, delivery method,
   date range; combinable filters; instant AJAX application; Failures only quick-
   filter; active filter tags displayed
 * Added: Bulk delete — row-level checkboxes with bulk action dropdown (WordPress
   standard pattern)
 * Added: Clear all logs button with confirmation dialog
 * Added: Visitor ID and Order ID columns in Event Log — visible but locked (Pro
   upsell teaser)
 * Changed: Event retention increased from 48 hours to 7 days
 * Changed: Rate limit now configurable in Settings (default 5 per minute, range
   1–100)

#### 1.2.0

 * Added: EventRegistry — central catalogue of all trackable events with per-event
   enable/disable toggles saved to wp_options
 * Added: EventDefinition DTO — immutable value object describing each event (name,
   category, label, description, default_enabled, is_pro)
 * Added: Event Configuration panel in Settings — grouped toggles by category; Lite
   events active; Pro events visible but locked with Pro badge
 * Added: WPCoreTracker — universal WordPress event tracking via PHP hooks (PageView,
   NotFound404, UserLogin, UserRegister, CommentPosted, SearchPerformed, SearchEmpty)
 * Added: TrackEndpoint — AJAX endpoint (wp_ajax_pxl_track_batch) for client-side
   events with nonce verification, batch size cap, rate limiting, and input sanitisation
 * Added: Universal JS event listeners in tracker.js — OutboundLinkClick, PhoneClick,
   EmailClick, DownloadClick, FormSubmit with event buffering and Beacon API flush
   on page unload
 * Added: enabledEvents map passed to tracker.js so JS events are gated client-side
   before leaving the browser
 * Added: RemoveFromCart, CartView, AddPaymentInfo, AddShippingInfo, CouponApplied,
   OrderRefunded, ProductReview WooCommerce events
 * Added: no_provider status — EventDispatcher logs events with status ‘no_provider’
   when no providers are configured
 * Changed: Debug Console renamed to Event Log in all user-facing strings
 * Changed: EventDispatcher now consults EventRegistry before dispatching — disabled
   events silently skipped

#### 1.1.1

 * Fixed: Fatal error on boot — removed invalid $session->register() call (SessionService
   has no register method)
 * Fixed: Events not appearing in Event Log when no provider is configured — dispatcher
   now logs ‘no_provider’ status

#### 1.1.0

 * Added: GTM provider — push events to window.dataLayer in GA4 Enhanced Ecommerce
   schema
 * Added: Tag detection — auto-detects existing Meta Pixel, GA4, and GTM installations,
   skips injection to prevent duplicates, shows admin notices in Settings
 * Added: Visitor ID system — anonymous 90-day cookie, visitor_id column in wp_pxl_events
 * Added: Object context on every event — object_type, object_id, object_title carried
   on every EventDTO
 * Added: Reason text for blocked/failed events — shown as tooltip on status badge
   in Event Log
 * Added: Pagination in Event Log — 50 events per page, AJAX refresh respects current
   page
 * Added: Filtering system — filter by provider, event name, status, delivery method,
   date range
 * Added: Bulk delete — row-level checkboxes with bulk action dropdown
 * Added: Clear all logs button with confirmation dialog
 * Added: Visitor ID and Order ID columns in Event Log (visible, locked for Pro)
 * Changed: Lite retention increased from 48 hours to 7 days
 * Changed: Rate limit now configurable in Settings (default 5 per minute, range
   1–100)
 * Fixed: Conditional WooCommerce loading — plugin now boots on any WordPress site,
   WooCommerce is an optional module

#### 1.0.0

 * Initial release
 * Meta Pixel browser-side events (PageView, ViewContent, AddToCart, InitiateCheckout,
   Purchase)
 * GA4 browser-side events with full ecommerce items array
 * WooCommerce event tracking via PHP hooks
 * Event Log with real-time AJAX auto-refresh and status badges
 * Consent Mode v2 support with per-category defaults
 * Attribution capture (UTM parameters, fbclid, gclid, ttclid, msclkid)
 * Rate limiting to prevent spam bot flooding
 * 7-day event retention with automated WP-Cron cleanup
 * Full data removal on plugin deletion

## Meta

 *  Version **1.6.4**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.3 or higher **
 *  Tested up to **7.0**
 *  PHP version ** 8.1 or higher **
 * Tags
 * [ga4](https://wordpress.org/plugins/tags/ga4/)[google analytics](https://wordpress.org/plugins/tags/google-analytics/)
   [Meta Pixel](https://wordpress.org/plugins/tags/meta-pixel/)[tracking](https://wordpress.org/plugins/tags/tracking/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/pixledger/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/pixledger/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/pixledger/reviews/)

## Contributors

 *   [ mentotex ](https://profiles.wordpress.org/mentotex/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/pixledger/)