Easy Digital Downloads settings reference
Every option in the Easy Digital Downloads section of the GTM4WP settings, what it changes in the data layer, what it is set to before you touch it, and when it is worth changing.
The Easy Digital Downloads integration is new in GTM4WP 2.1.0. GTM4WP 2.0.x: none of these options exist.
Where these settings live
Open the GTM4WP plugin settings page and go to the Easy Digital Downloads section. The options are split into five groups: General, Product data, Data layer content, Purchase tracking and Advanced. This page follows the same order. The section shows its options only while Easy Digital Downloads 3.0 or newer is active.
The badges next to the option names
The integration is new, so every option carries one of two badges:
- experimental: whether it works correctly depends on something GTM4WP cannot check on every site, such as your theme, a third party plugin or your hosting setup. Always off by default
- beta: complete, and expected to work on any standard WordPress and Easy Digital Downloads install. It stays in beta until it has enough real world use to be called stable
General
Track e-commerce (beta)
Default: off.
The master switch of the whole integration. While it is off, GTM4WP registers none of its Easy Digital Downloads hooks and loads none of its scripts, so nothing on this page reaches the data layer. That includes the order, customer and cart data options, even though they read as if they were independent. Turn this on first.
Easy Digital Downloads Product data
These options shape the item data itself, so they affect every consumer of it: Google Analytics 4, a Google Ads remarketing tag of your own, and the product data Google Ads receives through a linked Analytics property.
Products per impression (beta)
Default: 10.
Splits the view_item_list data of a page that lists many downloads into several events instead of one. A long list can otherwise carry more data than one measurement request can hold, and the impressions go missing. Enter 0 to send the whole list in a single event. If you raise the number, 10 to 15 is a sensible floor.
Use SKU instead of ID (beta)
Default: off.
Sends the SKU of the download as item_id instead of its WordPress post ID. Turn it on when your product feed is built from SKUs, because Google Ads can only connect a download in your feed to a download a visitor viewed when both use the same identifier. A download with no SKU falls back to its ID. SKUs have to be enabled in the Easy Digital Downloads settings first.
Taxonomy to be used for product brands (beta)
Default: (not used).
Names the taxonomy that holds the brand of your downloads, which GTM4WP then reports as item_brand. Easy Digital Downloads has no brand taxonomy of its own, so the list only shows taxonomies that another plugin or your own code adds to downloads.
Your stored choice survives a moment when the plugin that registers the taxonomy is inactive, so a deactivation during an update does not silently blank the setting.
Include full category path (beta)
Default: off.
Reports the full path of the download category, split into item_category to item_category5, instead of a single category name. Levels deeper than five are dropped. When Yoast SEO or Rank Math is active, the primary category chosen there is the one reported. On a large catalogue with heavy traffic this option can cause performance problems, so watch your page generation times after turning it on.
Report downloads in the default language (experimental)
Default: off.
On a multilingual store run with WPML or Polylang, this option reports every item in the default language of the store: item_id, item_name, item_category, item_brand and item_variant. Google Analytics groups items by item_id, so this is what combines a download sold in several languages into one item in your reports. The price stays the one shown on the current page.
item_id changes on translated pages, so review any product feed or dynamic remarketing setup that is keyed on the translated ID before you switch this on. Without WPML or Polylang nothing changes, and the settings screen shows the option as disabled with the note “Needs WPML or Polylang, and neither is active.” A developer can connect another multilingual plugin through the gtm4wp_master_language_post_id filter, which also enables the option. On a store with one language, or for a download that has no translation, nothing changes.
Persist download list attribution across the funnel (experimental)
Default: off.
When a visitor clicks a download in a list, this remembers which list it was, as item_list_name and item_list_id, in a first-party cookie that lasts three days. It then adds that list to the later view_item, add_to_cart, remove_from_cart, view_cart, begin_checkout, add_payment_info and purchase events and to the cart content variable, so Google Analytics 4 can attribute the whole funnel to the list that started it. Lists are named Downloads List, or Search Results on a search results page.
On a download page the browser adds the list rather than the server, so the attribution also survives a full page cache. Leave the option off if you already do the same with custom JavaScript in Google Tag Manager, otherwise the attribution is written twice. If the WooCommerce integration is active as well, its setting of the same name uses the same cookie, so the two settings share one list attribution.
Google Ads Business Vertical (beta)
Default: Retail.
Tells Google Ads which algorithm suits your dynamic remarketing campaign, and decides the name of the item identifier field in your tagging. There are nine choices: Retail, Education, Flights, Hotel rental, Jobs, Local deals, Real estate, Travel and Custom.
Flights and Travel send the identifier as destination. Every other vertical sends it as id. A stored value that is no longer valid falls back to Retail. The dynamic remarketing section of the Google Ads guide covers the rest of the setup.
Product ID prefix (beta)
Default: empty.
Puts a fixed text in front of the Google Ads identifier, id or destination, for example when a feed generator plugin prefixes the IDs it writes into your feed. The feed and the site tagging have to agree on the identifier. item_id itself is never prefixed.
Data layer content
Cart content in data layer (beta)
Default: off.
Adds the current cart to the data layer on every page as cartContent, with the cart subtotal, the cart total and the items. Site personalization tools are the usual consumer.
While the cache-safe data layer is on, cartContent arrives in its own gtm4wp.cartData event instead, which needs a Custom Event trigger in your container. The event fires again when the cart changes, and an empty cart is sent with an empty item list. The trigger guide covers that.
Customer data in data layer (beta)
Default: off.
Adds the details of a logged-in customer to the data layer on every page: customerFirstName, customerLastName, customerEmail, customerEmailHash (SHA-256), customerTotalOrders and customerTotalOrderValue. The visitor needs both a WordPress login and an Easy Digital Downloads customer record.
This is also the option that adds the user_data block to the purchase event, which Enhanced Conversions for Google Ads reads. That block is built from the order, so guest purchases are covered too. It carries the email address, phone number, first name and last name as SHA-256 hashes, plus the address. The phone number comes from the Easy Digital Downloads Phone field or from a checkout-field extension, is converted to the international E.164 format before hashing, and developers can supply one with the gtm4wp_edd_order_phone filter. The label of the option does not suggest any of this, so check it first when Enhanced Conversions sends nothing.
While the cache-safe data layer is on, the customer variables arrive in their own gtm4wp.customerData event instead, which needs a Custom Event trigger in your container. The user_data block of the purchase event is not affected.
Order data in data layer (beta)
Default: off.
Adds the orderData object to the purchase confirmation page: the order attributes (date, order number, payment method, mode, status and coupons), the totals (currency, subtotal, discount, tax and total), the billing details of the buyer with SHA-256 hashes of the email address, phone number and names, and the items. The payment key is never included, because it gives access to the receipt. The keys match the WooCommerce orderData, so the “Order Data -” variables of the GTM4WP container template work here too, apart from the shipping ones.
orderData is written even when the purchase event is not sent again, for example when an already tracked confirmation page is reloaded. It still needs Track e-commerce, and it is left out for an order older than the Only track orders younger than limit. The customer details are left out for a visitor Easy Digital Downloads would not show the receipt to.
Purchase tracking
Order statuses that trigger the purchase event (beta)
Default: Pending, Processing, Complete.
The purchase event is sent when the buyer reaches the confirmation page while the order is in one of these statuses. Offsite gateways such as PayPal can return the buyer while the order is still Pending, which is why Pending is included by default. The duplicate guards make sure the order is not counted again once it completes.
Remove Pending and Processing to count only completed orders. A buyer who reaches the confirmation page before the payment is confirmed is then not counted on that page. If you leave the list empty, every status except Failed counts. Developers can change the list with the gtm4wp_edd_purchase_trackable_statuses filter.
Only track orders younger than (experimental)
Default: 30 minutes.
The maximum age of an order, counted from when it was created, for the purchase event to fire. Opening the confirmation page of an older order is treated as a revisit to a purchase already measured, and it is skipped, together with orderData. Enter 0 to switch the check off.
Raise it if your buyers reach the confirmation page well after ordering, which happens with payment methods that return slowly. Unlike the WooCommerce integration, the age is never measured from the payment date.
Exclude tax from revenue (beta)
Default: off.
Reports revenue without tax, so the purchase value becomes the order total minus its tax. Item prices drop their tax at the same time in every event (product views, lists, cart, checkout and purchase), so item revenue still adds up to the transaction value. The tax value of the purchase event keeps carrying the full tax.
With taxes turned on in Easy Digital Downloads, product and list prices are converted with the tax rate of your store’s base location, so a cached download page shows the same price to every visitor. While this option is off, they include tax, as the cart does. A customer taxed at a different rate sees that rate only from the cart on, so the two prices can differ for them.
Transaction ID prefix (beta)
Default: empty, which sends the Easy Digital Downloads order number unchanged.
Puts a fixed text in front of the transaction_id of the purchase event, for example to tell several stores apart inside one GA4 property.
Only the purchase event changes. The order number inside orderData and the duplicate tracking guards of the plugin keep using the raw order number, so a prefix cannot cause an order to be counted twice. Set it before you go live if you can, because your reports will otherwise hold two different identifier formats either side of the change.
Do not flag orders as being tracked (beta)
Default: off, which is the safe setting.
Leaving this off is what stops an order being counted more than once. GTM4WP marks each order it has tracked, and the browser remembers the last order it sent, so reloading the confirmation page does not send a second purchase event.
Turning it on removes all of that protection and also switches off Reliable purchase tracking. The purchase event is then sent on every view of the confirmation page while the order is young enough and in a tracked status. Turn it on only if something else in your setup owns the deduplication.
Reliable purchase tracking (experimental)
Default: off.
Turn this on when some purchases are missing because buyers never reach the confirmation page, for example after an interrupted offsite payment. The purchase event is then sent on the next page the buyer views, found through the buyer’s own Easy Digital Downloads purchase session. Every duplicate check still applies, and orderData stays on the confirmation page only.
It only catches orders within the Only track orders younger than limit, 30 minutes by default, and with the default statuses a still Pending order counts. It has no effect while Do not flag orders as being tracked is on, and it cannot help when the buyer does not come back to your site.
It also works with the cache-safe data layer. The browser then fetches the missed purchase from your site after the page has loaded, so the purchase event arrives a little later than the other events of that page. It keeps the name purchase, so your existing trigger still fires.
Advanced
Clear ecommerce object before new event (beta)
Default: off.
Pushes an empty ecommerce object before each ecommerce event the browser sends: view_item_list, select_item, add_to_cart, remove_from_cart, add_payment_info, and the view_item sent when a price option is picked. Google recommends this, but it is not required here, because the GA4 event tag reads only the ecommerce data pushed most recently. Use it if values from an earlier event appear in a later one.
Set maximum timeout for select_item event (beta)
Default: 2000 milliseconds.
When a visitor clicks a download in a list, the browser waits for Google Tag Manager to report that the select_item tags have fired before it follows the link. This value is the longest it will wait, and it only comes into play when a tag fails to report back. select_item is only pushed when a Google Tag Manager container is found on the page.
Set it to 0 to open the download immediately. The select_item event is still pushed to the data layer, but the click is no longer held back. Use 0, or a value below 2000, if download links feel slow to open. That usually happens when a consent tool blocks Google Tag Manager, so the callback never returns and every click waits out the full timeout.
Checking what an option actually did
Most of these options change what appears in the data layer, and nothing warns you when the result is empty. Open Google Tag Manager preview mode on the page where you expect the data, for example a purchase confirmation page for anything under Purchase tracking, and read the data layer for the event in question.
If a whole group of values is missing, check Track e-commerce before anything else. It gates every other option on this page.

