This plugin tracks WooCommerce shop visitors and collects valuable data for conversion optimization, dynamic remarketing and reporting.
The Pixel Manager is the most complete and flexible solution for implementing pixels of various providers, like Google Analytics (Universal and GA4), Google Ads (formerly Google AdWords) Pixel, Meta Pixel (Facebook Pixel), Microsoft Pixel, TikTok Pixel and many more.
The Pixel Managers advanced architecture has numerous advantages over other solutions:
- Data privacy features allow you to achieve the highest level of GDPR (and other privacy) compliance.
- It is very easy to use and easy to understand.
- Filters allow to modify the output very flexibly and customize it perfectly to your needs.
- Standardized output to all pixels allows a much better apples to apples comparison between different providers.
While the setup is as simple as it can get, the pixel engine under the hood is very powerful. It tracks all e-commerce events and implements all advanced pixel features like Meta CAPI (Facebook CAPI) (Pro version), Google Analytics Enhanced E-Commerce, Google Shopping Cart Item Tracking and much more. For advanced users the plugin offers filters which allow to tweak the output flexibly and fine tune the behavior to each shop.
What sets us apart from other, similar plugins?
Out of many things, its unparallelled high tracking accuracy and a simple user interface are the most important properties that set our plugin apart from others.
Additionally, to the standard features offered by the tracking pixels we’ve developed more functional layers into the plugin which help increase measurement accuracy. For instance, if the plugin detects problems in the shop setup that might lower or prevent accurate tracking, it either fixes them seamlessly, or shows warnings with guidance on how to fix the problems.
Read more about the importance of tracking accuracy over here.
The plugin comes with integrations for:
- Google Ads Pixel (formerly Google AdWords)
- Google Analytics Pixel (Universal and Google Analytics 4)
- Meta Ads Pixel (Facebook Ads Pixel)
- Google Optimize Pixel
- HotJar Pixel
- Microsoft Ads Pixel (Pro version) (formerly Bing Ads)
- Twitter Ads Pixel (Pro version)
- Pinterest Ads Pixel (Pro version)
- Snapchat Ads Pixel (Pro version)
- TikTok Ads Pixel (Pro version)
- Google Ads Enhanced Conversions (Pro version)
- Meta Conversion API (Facebook Conversion API) (Pro version)
- Google Analytics Enhanced E-Commerce (Pro version)
- Precise measurement by preventing duplicate reporting effectively, and not counting failed payments.
- Collects dynamic remarketing audiences for dynamic retargeting (Google Ads, Meta (Facebook), etc.)
- Google Add Cart Data feature. Google support page
- Support for various cookie consent management systems
- Google Ads Conversion Tracking (formerly Google AdWords)
- Google Ads Dynamic Remarketing
- Google Ads Cart Item Tracking
- Google Shopping New Customer Parameter
- Google Analytics Universal Pixel (includes purchase tracking)
- Google Analytics 4 Pixel (includes purchase tracking)
- Google Optimize Pixel
- Meta Pixel (Facebook Pixel)
- Meta Remarketing Events (Facebook Remarketing Events)
- Hotjar Pixel
- Basic Order Duplication Prevention
- Many useful filters that help tweak the plugin output
- Works with lazy loaded product lists
Have a look at the full feature list over here.
- Meta CAPI (Facebook CAPI)
- Meta Microdata Output (Facebook Microdata Output)
- Google Analytics Universal and Google Analytics 4 Enhanced E-Commerce
- Google Consent Mode
- Google Dynamic Remarketing Choice for all Business Verticals
- Google Ads Enhanced Conversions
- Microsoft Advertising Pixel with Purchase and all Remarketing Events
- Twitter Ads Pixel with Purchase and all Remarketing Events
- Pinterest Ads Pixel with Purchase and all Remarketing Events
- Snapchat Ads Pixel with Purchase and all Remarketing Events
- TikTok Ads Pixel with Purchase and all Remarketing Events
- Advanced Order Duplication Prevention
Have a look at the full feature list over here.
The plugin supports and works with following third party plugins.
- WooCommerce Brands
- WooCommerce Composite Products
- WooCommerce Google Product Feed
- WooCommerce Wishlists
- Woo Discount Rules
- WP Marketing Robot Feed Manager
- YITH WooCommerce Brands
- YITH WooCommerce Wishlist
Link to the full documentation of the plugin: Open the documentation
Take a look at our roadmap to see what’s coming next.
Cookie Consent Management
The plugin uses data from several Cookie Consent Management plugins to manage approvals and disapprovals for injection of marketing pixels.
It works with the following Cookie Consent Management plugins out of the box:
- Cookie Script
- Complianz GDPR/CCPA Cookie Consent
- Cookie Notice
- Cookie Notice & Compliance for GDPR / CCPA
- Cookie Law Info
- GDPR Cookie Compliance
- Borlabs Cookie (from version 2.1.0)
Borlabs Cookie Setup
Please read the following for additional setup information
- Upload the plugin directory into your plugin’s directory
- Activate the plugin through the ‘Plugins’ menu in WordPress.
- Get the Google Ads conversion ID and the conversion label. You will find both values in the Google Ads conversion tracking code. Get the conversion ID and the conversion label
- In the WordPress admin panel go to WooCommerce and then into the ‘Google Ads Conversion Tracking’ menu. Please enter the conversion ID and the conversion label into their respective fields.
Is there detailed documentation for the plugin?
Yes. Head over to this link: Documentation
How do I check if the plugin is working properly?
- Turn off any kind of caching and / or minification plugins.
- Log out of the shop.
- Turn off any kind of ad or script blocker in your browser.
- Search for one of your keywords and click on one of your ads.
- Purchase an item from your shop.
- Wait up to 48 hours until the conversion shows up in Google Ads. (usually takes only a few hours)
With the Google Tag Assistant you will also be able to see the tag fired on the thankyou page.
I get a fatal error and I am running old versions of WordPress and/or WooCommerce. What can I do?
As this is a free plugin we don’t support old versions of WordPress and WooCommerce. You will have to update your installation.
I am using an offsite payment gateway and the conversions are not being tracked. What can I do?
We don’t support if an offsite payment gateway is in use. The reason is that those cases can be complex and time consuming to solve. We don’t want to cover this for a free plugin. We do not recommend offsite payment gateways anyway. A visitor can stop the redirection manually which prevents at least some conversions to be tracked. Also offsite payment gateways are generally bad for the conversion rate.
I’ve done everything right in the test, but it still doesn’t work. What can I do?
Here is a non-exhaustive list of causes that might interfere with the plugin code.
- Caching could also cause problems if caching is set too aggressively. Generally don’t ever enable HTML caching on a WooCommerce shop, as it can cause troubles with plugins that generate dynamic output.
I see issues in the backend of my shop. Admin pages get rendered weird, and popups don’t go away when I click to close them. How can I fix this?
You probably have some script or ad blocker activated. Deactivate it and the issues should go away. Usually you can disable the blocker for just that particular site (your WooCommerce back end).
Our plugin injects tracking pixels on the front end of WooCommerce shops. As a consequence scripts of our plugin have been added to some privacy filter lists. The idea is to prevent the scripts running if a shop visitor has some ad blocker enabled and wants to visit the front end of the shop. This is totally ok for visitors of the front end of the shop. But, it becomes an issue for admins of the shop who have a blocker activated in their browser and visit the backend of the shop.
Unfortunately there is no way for us to generally approve our scripts in all blockers for the WooCommerce back end.
Therefore, we recommend admins of the shop to exclude their own shop from the blocker in their browser.
Where can I report a bug or suggest improvements?
Please post your problem in the Pixel Manager for WooCommerce Support forum: Link
You can send the link to the front page of your shop too if you think it would be of help.
Contributors & Developers
“Pixel Manager for WooCommerce – Track Google Analytics, Google Ads, Facebook and more” is open source software. The following people have contributed to this plugin.Contributors
“Pixel Manager for WooCommerce – Track Google Analytics, Google Ads, Facebook and more” has been translated into 5 locales. Thank you to the translators for their contributions.
Interested in development?
- Tweak: Added safeguard if function as_enqueue_async_action isn’t available.
- Tweak: Performance improvements for the new Diagnostics page.
- Tweak: Few formatting fixes for payment gateway accuracy report
- Tweak: Improved performance for purchase confirmation page detection and order retrieval.
- Fix: Removed possible division by zero on settings page
- Tweak: Performance improvements for the new diagnostics report.
- New: Introduced new diagnostics section in the settings page.
- Tweak: Refactored documentation URL link compilation.
- Tweak: Added sanitization for importing settings.
- Tweak: Improved sanitization for arrays.
- Tweak: Added sanitization for saving state when purchase pixels have fired.
- Fix: Fixed the test which checks if Facebook CAPI is enabled.
- Fix: Fixed a division by zero error when no conversions have been tracked yet.
New: Switched all server requests to use the REST API with AJAX fallback. Much faster. Reduces server load by approx. 30%.
Tweak: Added WP memory limit to the debug information.
- Tweak: Added safeguard for CLV output on low memory systems.
- Tweak: Abort reporting of a subscription order to GA through the MP if it was created manually, and thus no parent order exists.
- Tweak: Updated Freemius library to remove PHP 8.x compatibility warnings.
- Tweak: Updated libphonenumber library.
- Tweak: Improved payment gateway analysis.
- Fix: Fixed a bug which prevented the add-to-wishlist event to be triggered.
- Fix: Fixed the ask-for-rating.js script
- Fix: Fixed a bug which prevented to run an environment server check on servers that don’t return the INPUT_SERVER array.
- New: Added export and import functionality.
- Tweak: Removed the deprecated ttq.track(“Browse”) event.
- Tweak: Tweaked is_order_received_page() in order to allow PMW to work with custom WooFunnels purchase confirmation pages. It might also work with custom Elementor purchase confirmation pages.
- Tweak: Added an additional trigger if a visitor clicks on an Elementor checkout button.
- Fix: Added the content_type to the FB InitiateCheckout event.
- Tweak: Bumped up Facebook API version to v14.0
- Tweak: Changed some jQuery event listeners to work around some themes / plugins that stop propagation of those events
- Tweak: Prevent console error on purchase confirmation page when Google Ads is disabled
- Tweak: Added product and value info to Facebook InitiateCheckout event
- Tweak: Refactored getting product details for add-to-cart event plus added condition for variable-subscription
- Tweak: Adjusted price output for wpmDataLayer products to two decimals
- Fix: Fixed the Facebook browser pixel external ID for anonymous users
- Fix: Replaced str_contains() with a backward compatible version for the admin notification check
- Tweak: Optimized ViewItem event on variable product pages when no product is preselected. The user has now the choice to fire a ViewItem event without product.
Tweak: Optimized how, when and where admin notifications are displayed
Fix: Don’t process CLV calculation if no billing email is available
- Tweak: Bumped up WordPress version to 6.0
- Tweak: Bumped up WoCommerce version to 6.5
- Fix: Fixed documentation links that contain anchors
- Fix: Fixed ask-for-rating scripts
- Tweak: Added safeguard to check if wpmDataLayer.products exists before trying to filter it
- New: Added GA4 session ID handling over the Measurement Protocol. This is not documented by Google and is experimental.
- Tweak: Added tier info into debug info
- Tweak: Added more FB user information for logged in users
- Tweak: Prevent slow processing of large amount of variation data for variable products with > 64 variations
- Tweak: Increased server test timout to minimize false negatives
- Fix: Workaround if $_server[‘HTTP_HOST’] is not set
- Fix: Workaround if $_server[‘REMOTE_ADDR’] is not set
- Tweak: Optimized clv query for clv output
- Tweak: Optimized retrieval of purchase labels for Google Ads
- Tweak: Optimized precheck for Google Ads purchase event
- Tweak: Optimized retrieval function for conversion identifiers with label for Google Ads
- Tweak: Optimized new_customer query to run faster
- Tweak: Updated libphonenumber
- Fix: Prevent that the Freemius menu tabs get displayed in other plugins
- Fix: Fixed the documentation links
- Fix: Additional safeguard to check for array when checking for updates
- Tweak: Adjusted db query for clv order total
- New: Added customer lifetime value output for Google Ads
- Tweak: Renamed the plugin from Pixel Manager for WooCommerce to Pixel Manager for WooCommerce
- Tweak: Added user identifiers for FB for orders and logged in users
- Tweak: Temporary disabled off_site_payment_gateway check
- Fix: Now the cache is only flushed when the Pixel Manager itself is updated
- Fix: Fixed the new_customer evaluation for guest buyers
- Fix: Fixed the position of the ‘scripts blocked’ warning message in the back-end if admin scripts don’t load
- Fix: Fixed the link of the ‘admin scripts not loaded’ message
- Tweak: Set that admins and shop managers are being tracked by default, because the majority of new users expects this
- Fix: Fixed document links for Meta (Facebook) settings
- Tweak: One more adjustment to make sure categories are being output for purchase events on shops that don’t properly sync the categories down to the variants
- Fix: It can happen that no proper product object is created by WC and is passed to the Facebook microdata output. In that case WPM will now terminate the microdata output seamlessly.
- Fix: Fixed a syntax error in on of the back-end admin scripts
- Tweak: Added a new event listener for the Complianz Cookie Banner
- New: Added function with which custom Facebook events can be triggered (including Facebook CAPI if it is enabled in the pro version)
- Tweak: Changed cursor for submenu links in the back-end
- Tweak: Added an additional check for a cookie name for Cookie Law Info
- Tweak: Some code style changes
- Tweak: Updated libphone library
- Tweak: Updated Freemius library
- Fix: Borlabs cookie auto-detection for Microsoft Ads (Bing Ads) fixed
- Tweak: Refactored some of the GA4 functions
- Tweak: Changed escaping method for outputting the titles and names into the wpmDataLayer in order to properly deal with characters like a dash, ampersand, etc.
- Tweak: Load categories for variations from parent product, because on some installs the variations don’t inherit the parent product’s categories
- Tweak: Removed more cruft from the code and improved the syntax here and there
- Tweak: Adjusted validation for the Google Merchant Center ID
- Tweak: Updated selectWoo.full.*.js
- Tweak: Tested up to WooCommerce 6.4
Tweak: Added more page type outputs (for better product list performance analysis in GA)
Tweak: Refactored GA3 and GA4 product data collection
Fix: Fix for view item events on single variation pages
- Tweak: More verbose logging of WPM load and pixel consent status into the dev console
- Tweak: Added new logic to retrieve categories for variations
- Fix: Fixed a bug that prevented disabling user role tracking
- Tweak: Remove the IPv6 to IPv4 mapping in case the the external user IP contains one
- Tweak: Improved local IP detection
- Tweak: Replaced deprecated FILTER_SANITIZE_STRING filter with FILTER_SANITIZE_FULL_SPECIAL_CHARS
- Fix: Improved detection of users that are deactivated for tracking
- Tweak: Removed data-cfasync=”false” to allow Cloudflare Rocket Loader to optimize scripts
- Tweak: Removed unused functions
- Tweak: Refactored some code and removed cruft
- Tweak: Improved logic of when to load cart items into the wpm dataLayer
- Tweak: For users, who have been disabled for tracking, prevent tracking entirely, not just for purchase events
- Tweak: Renamed Facebook to Meta
- Tweak: Add log entry when a purchase hit has been prevented because of a user role that has been opted out from tracking
- Tweak: Removed a few deprecated and inactive settings
- Tweak: Updated Enhanced Conversions output as per updated specs by Google
- Tweak: Improved formatting for Facebook CAPI event parameters
- Tweak: Removed an obsolete db cleanup function
- Tweak: On variable products, with no preselection send the valid variation ID if variations output is enabled
- Tweak: Added safeguard for debug info when URL redirect test fails to open the URL
- Tweak: Syntax improvements in wpm.addProductToCart()
- Tweak: Simplified logic when the wpm.getCartItems() function is called
- Tweak: Deprecated the wpm_track_mini_cart filter
- Tweak: Added cookie detection for Cookie Law CMP with French named cookies
- Tweak: Added one more safeguard in case the main wpmDataLayer init is being blocked by some third party plugin and products need being loaded into the wpmDataLayer further down below
- Tweak: Added console log output when pixels don’t fire because of user consent choice
- Tweak: Added a payload logger for Facebook CAPI events
- Tweak: Initiate WC session later in the checkout funnel (if necessary at all) to improve caching conditions
- Tweak: Added URL parameter debugConsentMode for verbose debug output in the browser console in relation to user cookie consent
- Fix: Product name transmission for Google Analytics Universal purchases
- Tweak: Attach click handlers later during loading in order to better deal with some side cases
- Tweak: Fire viewItem event on variable product pages when no variation is selected yet, sending the ID of the parent product
- Tweak: Silenced status icon on compatibility mode setting when disabled
- Fix: Added safeguard if old version of FlyingPress is being used and compatibility mode is enabled
- Fix: Added safeguard if old version of WP Rocket is being used and compatibility mode is enabled
- Fix: Added safeguard if Yoast SEO is being used and compatibility mode is enabled
- Tweak: Adjusted sourcemaps output to make them work with Firefox
- Fix: Proper check for user id when logged in
- Experiment: Added experimental filter which defers the WPM script. The filter may be removed without prior notice. If you like the filter vote it up over here: https://roadmap.sweetcode.com/pixel-manager-for-woocommerce?card=622f4ba9d0b938002e8378c0
- Experiment: Added experimental filter which moves the WPM script to the footer. The filter may be removed without prior notice. If you like the filter vote it up over here: https://roadmap.sweetcode.com/pixel-manager-for-woocommerce?card=622f4bc2d0b938002e8378e2
- Tweak: Moved sourcemaps into correct folder
- Tweak: Moved parts of the back-end logic to the front-end in order to gain much more flexibility and better handle front-end script flow
- Tweak: Bumped up WC version
- Tweak: Adjusted all documentation links to point to new domain and sub-folder
- Tweak: Improved handling with SG Optimizer
- Tweak: Added items to Microsoft Ads purchase event
- Tweak: Added ‘wpm-js’ to optimization exclusion list
- Fix: Added a safeguard when checking for order purchase redirects in the UX
- Fix: Fixed a double json encoded string for the GA4 browser purchase event
- Tweak: Avoid loading the entire admin UX in case an admin is not viewing the plugin admin page itself
- Fix: Fixed a side case where the plugin would output wrong html in case the pro version demo is enabled
- Tweak: Replace sweetcode.co references with sweetcode.com
- Fix: Replaced function wpm.objectExists() because it did not always work properly
- Fix: Plenty of syntax adjustments in order to adhere to all WooCommerce and WordPress coding standards
- Fix: Fixed refunds for GA UA measurement protocol
- Fix: fixed an error that would appear if no Google pixel is turned on and the wpm scripts are looking for Google values in the wpmDataLayer
- Tweak: Tweaked settings for new cookie names in CMP Complianz >= version 6.0.0
- Tweak: Rebranding to sweetcode.co
- Tweak: Refactored plenty function names
- Tweak: Improved WP Rocket cache flush and recreation
- Tweak: Refactored documentation links into a class
- Tweak: Added safeguards in case some wpm functions have not been loaded properly
- Tweak: Included transpiling ES6 into the JS minification process
- Tweak: Combined all front-end and back-end scripts into single, optimized and compressed files
- Tweak: Removed functions from the newly combined files that are not necessary anymore, like Promise.allSettled
- Tweak: Removed some unnecessary console.log outputs
- Tweak: Added a safeguard when flushing Flying Press Cache
- Tweak: Added support output for various CMPs into the admin pages
- Tweak: Added more safeguards in case on the purchase confirmation page the order can’t be retrieved through query vars
- Tweak: A few improvements how to read out cookies for various CMPs
- Tweak: Improved gtag firing based on cookie consent
- Tweak: Improvements to read out of Cookie Script consent cookie
- Tweak: Improvements to read out of Cookiebot consent cookie
Fix: Deliver proper updated wpm.jsx
- Tweak: Added automatic improvements for users of the Optimocha Speed Booster Pack plugin
- Tweak: Added automatic improvements for users of the Flying Press plugin
- Tweak: Added a few console warnings if wooptpm scripts are being deferred
- Fix: Fixed a bug that appeared when a shop was using the “Complianz | GDPR/CCPA Cookie Consent” consent management plugin
- Tweak: Added back the cookie prevention filter and included a deprecation notice
- Fix: Fixed a bug that appeared when a shop was using the “CookieYes, GDPR Cookie Consent (Cookie Law Info)” consent management plugin
New: Added dynamic remarketing ID output for the WooCommerce Google Listings & Ads plugin
Tweak: Bumped up minimum PHP version to 7.3
- Tweak: Much more cache friendly handling of Cookie Consent Platforms
- Tweak: Added support for several more Cookie Consent Platforms
- Tweak: Properly handle error if WooCommerce is not active
- Tweak: Adjusted HotJar ID validation to accept 6 digit IDs
- Tweak: Switched body reference to jQuery(document) for better compatibility
- Tweak: Improved some admin interface text
- Tweak: Don’t disable the deactivation button anymore when a user chooses “other” from the list of reasons
- Tweak: Added minified versions of all front-end scripts
- Tweak: Removed query to remove old refund keys from db
- Fix: Fixed an array type error that could happen in rare cases
- New: Added shortcodes for Snapchat and TikTok
New: Saving referrer in a wooptpm cookie
Tweak: Moved Freemius to composer vendor directory
- Tweak: Improved handler to save cookies for FB session
- Tweak: Added fallback to get an order from the order received page in case a plugin messes with query vars
- New: Automatic cache purge for Kinsta on plugin updates and saved settings
- Tweak: Added safeguard in order to prevent a fatal error when coming across a variation that doesn’t properly link to a parent product
- Tweak: Added filters to suppress certain admin notifications
- Tweak: Changed global for notifications db name
Tweak: Changed function declaration for varExists in order to work around a Google Closure bug
Fix: Built in a safeguard for the debug info in case no order exists yet in the shop
- Tweak: Added coupons to GA UA and GA4 purchase events
- Tweak: Avoid an issue when trying to read WP Rocket options when no options exist yet
- Tweak: Removed some unnecessary parameters from Google Ads purchase confirmation script
Tweak: Output purchase value with max two decimals
Fix: Fixed some events on cart page for variable products
- New: Filter for order items
New: Implemented warning for incompatible plugins
Tweak: Refactored wooptpm.setCookie() so that it can create session cookies
Fix: Output of product prices as float
- Fix: Added string to float conversion in wooptpm_get_order_item_price to make sure a float is returned
- New: Automatically flush cache of caching plugins and platforms on plugin settings changes
- New: Report hosting platform in debug info
- Tweak: Added new compatibility exclusions for WP Rocket
- Tweak: Added option to filter GA4 parameters
- New: Filter for custom brand taxonomy
New: Added payment gateway usage and successful redirect stats to free version
Tweak: Refactored several elements in order to render correctly in RTL environments
- Tweak: If product belongs to multiple categories, output them in a comma separated list for GA
- Tweak: Automatically detect if mini cart is being used, and depending on this, enable or disable wooptpm_get_cart_items
Tweak: Caching cart contents in sessionStorage in order to avoid as many API calls to backend as possible
Fix: Fixed version check for db upgrade function in case someone has been using one of the earliest versions of the plugin
- Tweak: Fallback on PayPal check if option doesn’t exist in the db
- Tweak: Removed manual function override from Freemius source
- Tweak: Added page type output on order received page
Tweak: Switched data wooptpmProductId output on product pages to meta tag for main product
Fix: Fixed ViewContent id_type variable for Facebook, GA UA and GA4
- Fix: Added dynamic remarketing purchase script
New: Added hook_suffix into debug info
Tweak: Adjusted the $hook_suffix check in admin.php because on some installs the $hook_suffix output is buggy
- New: Added conversion accuracy warning if the PayPal standard payment gateway is active
New: Added support for WooCommerce composite products
Tweak: Implemented better way to reference .js and .css files
- Tweak: Removed jquery.cookie.js dependency
- Tweak: parseFloat for value in Facebook and Pinterest just in case no proper input is received
- Tweak: Added an exclusion to fix an issue with Microsoft Ads, caused by Cloudflare Rocket Loader
- Tweak: Removed launch deal code
- Tweak: Cleaned up some cruft
- Tweak: Added new element selector for the intersection observer for product templates that pack the wooptpmProductId into a child > child hierarchy
- Fix: Added default quantity if quantity field has been removed on a product page
- Fix: Switched to treat order IDs as strings. Otherwise it would throw an error if a shop owner changes order IDs to also use letters.
- New: Added filter for Google cross domain filter setting
- Tweak: Added more safeguards in case WC processes a product ID which is not a product
- Fix: Product data output on some pages triggered a critical error
- Tweak: Switch to use different hook on product pages to output main product data
- Tweak: Renamed and deprecated several old filters
New: Added a debug test to see if the server can reach the outside world with a wp_remote_get() request
Tweak: Added better fallback for cookie retrievals if cookies can’t be saved in the session
- Fix: Fire view_item event on products that are out of stock
- Fix: In case the redirect check returns an array of redirects, we return the last array member.
- Tweak: Only show the rating notice to admins of the shop.
- Tweak: Added more exclusions for WP Rocket
- Tweak: Added exclusions for WP Optimize
- Tweak: Additional exclusions for Autoptimize
- Tweak: Removed hit on for parent IDs on a variable product page
Tweak: Added one more tweak for LiteSpeed Cache users
Fix: Changed reading options from database to passing options from primary instance in order to avoid options caching issues on saving.
- Tweak: Added dependencies to enqueued scripts
- Tweak: Improved the parent selector for the mutation observer for lazy loaded products
- Tweak: Implemented better product selector for modification observer
- Tweak: Added new selector for related products
- Tweak: Finalized improvement for front-end error handling
- Tweak: Added a JS modification exclusion for Autoptimize in order to prevent our script to get modified and broken
- Fix: Fixed a selector for cart items on the cart page which caused on certain custom shop templates to trigger an error
- Tweak: Added one more layer of safeguards if wpm.jsx can’t evaluate the current productId
- Tweak: Added one more safeguard if wpm.jsx can’t evaluate the current productId
- Tweak: Added some some safeguards in order to stop processing in case no productId can be evaluated
- Tweak: Removed deprecated “disable gtag insertion” feature entirely
- Tweak: Additional caching exclusions for SG Optimizer
- Tweak: Changed the gtag code in order to make it better testable
- Tweak: Moved some scripts to the footer
- Tweak: Improved add_to_cart trigger
- Tweak: Refactored view_item_list event entirely to be unaffected by caching mechanisms
- Tweak: Added a new view_item_list trigger with some interesting options
- Fix: Fixed front-end triggers for Google and Facebook to only fire if the pixels are enabled
- Fix: Fixed an array check if an old WP Rocket version was installed and threw a notice about a missing array index
- Fix: Output correct price if WPML Multilingual with Multi-currency is running
- New: Filter to switch Google Analytics ID output to SKU
New: Process discounted order item price for GA if Woo Discount Rules is active
Tweak: Moved getCartItems to document.load event
- Tweak: Added Freemius purchase conversion
- Tweak: Avoid number output with too many decimals
Tweak: More reliable method to get order from order received page
Fix: Proper variable types for purchase confirmation variables
- Fix: Initialize wooptpmDataLayer.pixels early, so that all pixels can use it
- Fix: Replaced $order->get_id() with $order->get_order_number in order to fix a bug on a small subset of shops
- Fix: Get proper WP db prefix for refunds SQL query
- Tweak: LD check
- Tweak: Implemented permanent compatibility mode for SG Optimizer
- Tweak: Implemented permanent compatibility mode for LiteSpeed Cache
- Tweak: Refactored the Facebook pixel and events
- Tweak: Implemented permanent compatibility mode for WP Rocket
- Fix: Added a function that should be available in the free version conversion_pixels_already_fired_html
- Fix: Include output of variable products into the visible_products object
- Fix: Added a missing opening tag for shops that are still using the gtag deactivation option
- Tweak: Partially decoupled pixels from pixel manager
Tweak: Refactored browser e-commerce events into pubsub
Fix: Under some circumstances rating_done is not set in the wgact_ratings option. This fix adds this default option.
- Fix: Fixed the GA 4 config command
- New: Added output of related up- and cross-sell product view_item_list list events for Google Ads dynamic remarketing
- New: Added &nodedupe URL parameter for testing the order confirmation page
- Tweak: Build in a fallback for misconfigured variable products that trigger an “Error: Call to a member function get_sku() on bool”
- Fix: Fixed the Google Analytics config filter
- New: Added Pro feature demo mode
- New: Added shortcodes for tracking leads and similar conversions
- New: Filter to adjust Google Analytics config parameters
- New: Google Analytics link attribution
- Tweak: Bumping up WP supported version to 5.7
- Tweak: Some code syntax cleanup
- Tweak: Remove some freemius options
- New: Output the variation ID for dynamic remarketing
New: Maximum compatibility mode
Tweak: Switched logic to activate conversion cart data automatically when merchant center ID is set
- Tweak: Made Google Analytics always receive the post ID as product ID because this is more robust
- Tweak: Removed some unnecessary text output in the settings
- Fix: Script blocker documentation link
- Fix: Determine correctly new customer for shopping cart data on new customers who paid immediately
- Tweak: Created new trait to calculate brand for product
- Tweak: Added a new array with additional product attributes (like brand which is calculated)
- Tweak: added ability to load traits in autoload.php
- Tweak: Bumped up WC version
- Tweak: Added an additional is_array() check in order to suppress a PHP 7.4 notice when checking the environment
- Tweak: Make the noptimize tag only appear if Autoptimize is active
- Tweak: Removed a duplicate filter
- Fix: Moved get_cart() query into is_cart() condition
- New: Filter to prevent conversion pixels to fire on purchase confirmation page
- Tweak: Replaced _e() with echo where necessary
- Tweak: Syntax cleanup
- Tweak: Calculate filtered order total for all pixels
- Fix: Removed a function call where the function was missing
- New: Added basic order deduper
- New: Google Shopping new_customer parameter
- New: Added switch to enable transaction deduping (default enabled)
- Tweak: Product identifier output now for all the same
- Tweak: Adjusted the HTML comment output
- Tweak: Added new cookie for Borlabs Cookie
- Tweak: Made some input elements clickable
- Tweak: Moved check for failed payments and admin and shop manager up to the pixel manager
- Tweak: readme.txt links
- Tweak: fallback to post ID in case the SKU is not set
- Tweak: Adjusted the HTML comments
- Tweak: Don’t inject cart scripts on cart page if cart is empty
- Tweak: Bumped up version
- Tweak: Changed regex for GMC IDs to allow 7 digit IDs
- Tweak: Improved speed to hide script blocker warning
- Tweak: Adjusted documentation links
- Fix: Added new classes to SVN
- Tweak: Code cleanup
- Tweak: Adjusted doc links
- New: Hotjar pixel
- Tweak: Renamed subsection ‘Order Logic’ to ‘Shop’
- Tweak: Refactored debug info
- New: Added filter which helps adding multiple additional conversion IDs and labels
- Fix: Version number
- Fix: FB default pixel id
- New: Google Analytics UA standard beta
- New: Google Analytics 4 beta
- New: Google Optimize beta
- New: Activation indicators
- Tweak: Put admin scripts into header for faster rendering
- Fix: Detect proper admin path in tabs.js
- New: Facebook pixel
- Tweak: Adjust db and bump up to version 3
- Tweak: Introduced Pixel_Manager and restructured Google Ads class
- Fix: Removed namespace for main class because it was conflicting with freemius in some cases
- Fix: Directory name fix
- New: Warning message if an ad- or script-blocker is active
- Tweak: Improved one of the db saving functions
- Tweak: Start using namespaces
- Fix: child theme detection
- Fix: Roll back to 1.7.7 since namespace don’t work everywhere
- Fix: child theme detection
- New: Warning message if an ad- or script-blocker is active
- Tweak: Improved one of the db saving functions
- Tweak: Start using namespaces
- Fix: Don’t show the rating popup if an admin uses a script blocker
- Fix: Improved check if dynamic remarketing settings already has been set before checking for it.
- Fix: Saving to the database threw sometimes warnings that have been fixed.
- Tweak: Styling changes
- New: Added checks for freemius servers
- New: Dynamic remarketing pixels
- New: Deactivation trigger for the WGDR plugin if dynamic remarketing is enabled
- Fix: Adjusted the cookie name for Cookie Law Info
- Fix: Improved detection if WooCommerce is active on multisite
- Fix: Fixed default setting for conversion_id
- Tweak: Added back rating testing code
- Tweak: Adjusted some links
- Tweak: Code style cleanups
- Fix: Fixed the ask for rating constant
- Fix: Don’t open the rating page if user clicks on already done
- Tweak: Backward compatibility to PHP 7.0
- Fix: Fixed a printf syntax error that caused issues on some installations
- Tweak: Removed deletion of settings on uninstall in order to preserve the settings
- New: Added German translations
- Fix: Reversed some code in freemius to make it compatible with older versions of PHP (< PHP 7.2)
- Fix: Fixed the uninstall hook for it to work with freemius
- Tweak: Added some comments for translators
- Tweak: Removed old language packs
- Tweak: Add gtag config if gtag insertion is disabled
- Tweak: Rating request improved
- Tweak: Removed plugin ads
- Tweak: Added documentation
- Tweak: Updated db scheme
- Tweak: Merge new default options recursively
- Tweak: On save merge new and old options recursively, set missing checkbox options to zero, omit db_version
- Tweak: Reactivate freemius
- Fix: Deactivate freemius
- Tweak: Adjusted freemius main slug for plugin
- New: Implemented Freemius telemetry
- Tweak: Adjustments to the descriptions and links to new documentation
- Tweak: Only run if WooCommerce is active
- New: Implemented framework for sections and subsections
- Tweak: Some code cleanup
- Tweak: Made strings more translation friendly
- Tweak: Properly escaped all translatable strings
- Fix: Textdomain
- New: Plugin version output into debug info
- Fix: Conversion id validation
- Tweak: Bumped up WC and WP versions
- New: Tabbed settings
- New: Debug information
- Tweak: Code style adjustments
- Fix: Disabled some error_log invocation since it can cause issues in some rare server configurations
- Fix: Re-enabled settings link on plugins page
- Fix: Changed how Borlabs Cookie activation works
- Fix: Implemented check for Borlabs minimum version
- New: Added option to disable the pixel with a filter add_filter( ‘wgact_cookie_prevention’, ‘__return_true’ )
- New: Added Borlabs cookie management approval for marketing
- Tweak: Refactored the code into classes
- Tweak: Removed duplicate noptimize tag
- Tweak: Removed CDATA fix since it is not necessary anymore with the new conversion tag
- Fix: Fixed the calculation for the non-default order total value (which includes tax and shipping)
- Info: Tested up to WP 5.4
- Tweak: More reliable method to detect the visitor country added
- New: Add Cart Data feature
- New: Added a switch to disable the insertion of the gtag
- Tweak: Added more descriptions on the settings page
- Tweak: Code optimisations
- Tweak: Made the conversion ID and label validation code more robust
- Tweak: Updated function that inserts the settings link on the plugins overview page
- Info: Tested up to WP 5.2
- Fix: Correctly calculate the value when no filter is active
- Tweak: Re-enabled order value filter
- Info: Tested up to WP 5.1
- Info: Updated a few text strings
- Info: Changing name from AdWords to Google Ads
- Info: Tested up to WC 3.5.3
- Info: Tested up to WC 3.5.2
- Tweak: bumping up the WC version
- Tweak: remove some debug code
- fix: properly save the order_total_logic option
- Tweak: switched sanitization function to wp_strip_all_tags
- Tweak: Added input validation and sanitization
- Tweak: Added output escaping
- Tweak: Added discounts into order value calculation
- New: Switched over to the newest version of the AdWords conversion tracking pixel
- Tweak: Disabled minification through Autoptimize
- Tweak: Order ID back in apostrophes
- Tweak: The correct function is being used to get the currency depending on the WooCommerce version
- Fix: Added missing noscript tag
- Tweak: Remove campaign URL parameter
- Fix: Backward compatibility for $order->get_currency()
- Tweak: Making the plugin PHP 5.4 backwards compatible
- Fix: Fixing double counting check logic
- New: Ask kindly for a rating of the plugin
- New: Add a radio button to use different styles of order total
- Tweak: Consolidate options into one array
- Tweak: Code cleanup
- New: WordPress 4.8 compatibility update
- Tweak: Minor text tweak.
- Fix: Fixed a syntax error that caused issues on some installations.
- Tweak: Added some text output to make debugging for users easier.
- Tweak: Refurbishment of the settings page
- New: Uninstall routine
- New: Keep old deduplication logic in the code as per recommendation by AdWords
- New: AdWords native order ID deduplication variable
- New: Filter for the conversion value
- Fix: wrong conversion value fix
- New: Filter for the conversion value
- Tweak: Code cleanup
- Tweak: To avoid over reporting only insert the retargeting code for visitors, not shop managers and admins
- Tweak: Switching single pixel function from transient to post meta
- Fix: Adding session handling to avoid duplications
- Fix: Skipping a tag version
- Fix: Implement different logic to exclude failed orders as the old one is too restrictive
- Fix: Exclude orders where the payment has failed
- New: Banner and icon
- Update: Name change
- Update: Release of version 1.0!
- Update: Minor update to the internationalization
- Update: Minor update to the internationalization
- New: The plugin is now translation ready
- Update: Improving plugin security
- Update: Moved the settings to the submenu of WooCommerce
- Update: Further improving cross browser compatibility
- Update: Implemented a much better workaround tor the CDATA issue
- Update: Implemented the new currency field
- Fix: Corrected the missing slash dot after the order value
- Fix: Corrected the plugin source to prevent an error during activation
- Significantly improved the database access to evaluate the order value.
- Added some PHP code to the tracking tag as recommended by Google.
- Added settings field to the plugin page.
- Visual improvements to the options page.
- Changed the woo_foot hook to wp_footer to avoid problems with some themes. This should be more compatible with most themes as long as they use the wp_footer hook.
- Changed conversion language to ‘en’.
- Disabled the check if WooCommerce is running. The check doesn’t work properly with multisite WP installations, though the plugin does work with the multisite feature turned on.
- Added more description in the code to explain why I’ve build a workaround to not place the tracking code into the thankyou template of WC.
- Some minor changes to the code
- This is the initial release of the plugin. There are no known bugs so far.