{"id":354315,"date":"2026-08-30T15:49:42","date_gmt":"2026-08-30T15:49:42","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ecomsolvebd\/"},"modified":"2026-08-30T17:20:13","modified_gmt":"2026-08-30T17:20:13","slug":"ecomsolvebd","status":"publish","type":"plugin","link":"https:\/\/tw.wordpress.org\/plugins\/ecomsolvebd\/","author":23549929,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.66","stable_tag":"1.0.66","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"EcomSolveBD","header_author":"EcomSolveBD","header_description":"First-party analytics and attribution for EcomSolveBD \u2014 UTM, click IDs, sessions, WooCommerce events.","assets_banners_color":"1e3b3d","last_updated":"2026-08-30 17:20:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ecomsolvebd.com","header_author_uri":"https:\/\/profiles.wordpress.org\/ecomsolvebd\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":69,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.63":{"tag":"1.0.63","author":"ecomsolvebd","date":"2026-08-30 15:49:58","revision":3672792},"1.0.64":{"tag":"1.0.64","author":"ecomsolvebd","date":"2026-08-30 16:12:32","revision":3672817},"1.0.66":{"tag":"1.0.66","author":"ecomsolvebd","date":"2026-08-30 17:20:13","revision":3672904}},"upgrade_notice":{"1.0.61":"<p>First-party DNS UI removed from WP admin (use EcomSolveBD dashboard). Status still syncs. Safe overwrite.<\/p>","1.0.60":"<p>Prefix rename (<code>ecomso_*<\/code>); settings migrate from <code>esb_*<\/code> automatically. Safe overwrite (folder <code>ecomsolvebd<\/code>).<\/p>","1.0.59":"<p>Plugin Check gtag version fix. Safe overwrite (folder <code>ecomsolvebd<\/code>).<\/p>","1.0.58":"<p>readme Tested up to 7.1. Safe overwrite (folder <code>ecomsolvebd<\/code>).<\/p>","1.0.57":"<p>WordPress.org review compliance (DNS verify, enqueue, sanitization, readme). Safe overwrite (folder <code>ecomsolvebd<\/code>).<\/p>","1.0.56":"<p>Plugin Check security\/enqueue fixes. Same features \u2014 safe overwrite (folder <code>ecomsolvebd<\/code>).<\/p>","1.0.55":"<p>Folder renamed to <code>ecomsolvebd<\/code>. Delete old <code>ecomsolvebd-tracker<\/code> folder before installing this zip (settings are kept).<\/p>","1.0.54":"<p>Plugin\/Author URI header fix for WordPress.org. Same features \u2014 safe overwrite (keep folder <code>ecomsolvebd<\/code>).<\/p>","1.0.53":"<p>WordPress.org source disclosure for the tracker bundle. Same features \u2014 safe overwrite update (keep folder <code>ecomsolvebd<\/code>).<\/p>","1.0.23":"<p>Display name EcomSolveBD + white admin menu icon. Same folder slug \u2014 safe to overwrite-update.<\/p>","1.0.22":"<p>Branding and WordPress.org documentation updates. Keep the same plugin folder name when updating \u2014 do not rename <code>ecomsolvebd<\/code>.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3672926,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3672926,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3672926,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3672926,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.63","1.0.64","1.0.66"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[232,9067,550,24188,286],"plugin_category":[36,45],"plugin_contributors":[278359],"plugin_business_model":[],"class_list":["post-354315","plugin","type-plugin","status-publish","hentry","plugin_tags-analytics","plugin_tags-attribution","plugin_tags-tracking","plugin_tags-utm","plugin_tags-woocommerce","plugin_category-analytics","plugin_category-ecommerce","plugin_contributors-ecomsolvebd","plugin_committers-ecomsolvebd"],"banners":{"banner":"https:\/\/ps.w.org\/ecomsolvebd\/assets\/banner-772x250.png?rev=3672926","banner_2x":"https:\/\/ps.w.org\/ecomsolvebd\/assets\/banner-1544x500.png?rev=3672926","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ecomsolvebd\/assets\/icon-128x128.png?rev=3672926","icon_2x":"https:\/\/ps.w.org\/ecomsolvebd\/assets\/icon-256x256.png?rev=3672926","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>EcomSolveBD connects your WordPress \/ WooCommerce store to <a href=\"https:\/\/ecomsolvebd.com\">EcomSolveBD<\/a> so you can attribute visits and orders with first-party collection.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Browser tracking for UTM parameters and ad click IDs (e.g. gclid, fbclid, ttclid)<\/li>\n<li>WooCommerce events when WooCommerce is active (view item, add to cart, purchase, and related hooks)<\/li>\n<li>Optional first-party tracking hostname (CNAME) to reduce ad-blocker impact<\/li>\n<li>Optional Google Analytics 4 Measurement ID (standard gtag.js automatic events only)<\/li>\n<li>Product feed URLs for EcomSolveBD catalog, Meta, TikTok, and Google Merchant Center<\/li>\n<\/ul>\n\n<p>This plugin is a client for the EcomSolveBD service (SaaS). You need a free or paid EcomSolveBD account and a Tracking Merchant ID from your dashboard. All plugin code is free under GPLv2 or later; EcomSolveBD account features are provided by the service.<\/p>\n\n<p><strong>External services<\/strong><\/p>\n\n<p>After you save a valid Merchant ID, the plugin communicates with external services. No data is sent until you connect.<\/p>\n\n<ul>\n<li><p><strong>EcomSolveBD API<\/strong> (<code>https:\/\/api.ecomsolvebd.com<\/code>) \u2014 validates your Merchant ID, syncs configuration, receives tracking and order-related events, provisions first-party collect hostnames, and powers reporting in your dashboard. Sent when you save settings, test connection, verify DNS, sync orders, or when storefront visitors trigger tracking. Terms: https:\/\/ecomsolvebd.com\/terms \u2014 Privacy: https:\/\/ecomsolvebd.com\/privacy<\/p><\/li>\n<li><p><strong>Your first-party tracking subdomain<\/strong> (optional CNAME you configure) \u2014 after DNS verification, browser collect requests may go to your own subdomain (for example <code>tracking.yourstore.com<\/code>) instead of the API host. Sent only when tracking runs on your storefront.<\/p><\/li>\n<li><p><strong>Cloudflare DNS over HTTPS<\/strong> (<code>https:\/\/cloudflare-dns.com\/dns-query<\/code>) \u2014 used by the EcomSolveBD service when you verify first-party DNS in your dashboard (Integrations). The WordPress plugin syncs the verified status; it does not run DNS checks on its own. Cloudflare terms: https:\/\/www.cloudflare.com\/website-terms\/ \u2014 Privacy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/p><\/li>\n<li><p><strong>Google Analytics \/ Google Tag Manager<\/strong> (optional) \u2014 when you enter a GA4 Measurement ID, the plugin loads <code>gtag.js<\/code> from <code>https:\/\/www.googletagmanager.com\/gtag\/js<\/code> for standard GA4 automatic events. Google terms: https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/us\/ \u2014 Privacy: https:\/\/policies.google.com\/privacy<\/p><\/li>\n<\/ul>\n\n<p>See the FAQ below for a summary of storefront data fields.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin does not phone home until an administrator configures a Merchant ID (and optionally GA4). Merchants are responsible for disclosing storefront analytics and advertising attribution to their visitors (cookie \/ privacy notices, consent tools) as required by local law. Visitor identifiers may be stored in first-party cookies for attribution continuity.<\/p>\n\n<p>Privacy policy: https:\/\/ecomsolvebd.com\/privacy<br \/>\nTerms: https:\/\/ecomsolvebd.com\/terms<\/p>\n\n<h3>Development<\/h3>\n\n<ul>\n<li>Readable tracker source: <code>src\/tracker\/<\/code><\/li>\n<li>Build notes: <code>src\/BUILD.txt<\/code><\/li>\n<li>Minified runtime: <code>assets\/js\/ecomsolvebd.js<\/code> (generated; do not hand-edit)<\/li>\n<li>Other storefront scripts (<code>ecomso-runtime.js<\/code>, <code>ecomso-wc-bridge.js<\/code>) ship unminified<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>In WordPress go to <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong> (or install from WordPress.org when listed).<\/li>\n<li>Upload the <code>ecomsolvebd<\/code> zip, or search for <strong>EcomSolveBD<\/strong>.<\/li>\n<li>Activate <strong>EcomSolveBD<\/strong>.<\/li>\n<li>Open <strong>EcomSolveBD<\/strong> in the admin menu, paste your Tracking Merchant ID from <a href=\"https:\/\/ecomsolvebd.com\/dashboard\">EcomSolveBD \u2192 Integrations<\/a>, and save.<\/li>\n<li>(Optional) Configure first-party DNS in EcomSolveBD \u2192 Integrations (the plugin syncs status). Optionally set a GA4 Measurement ID under <strong>Google Analytics 4<\/strong> in this plugin.<\/li>\n<\/ol>\n\n<p><strong>Correct install path:<\/strong> <code>wp-content\/plugins\/ecomsolvebd\/ecomsolvebd.php<\/code><\/p>\n\n<p>If WordPress shows <strong>\u201cPlugin file does not exist\u201d<\/strong>, delete any broken <code>ecomsolvebd*<\/code> or legacy <code>ecomsolvebd-tracker*<\/code> \/ <code>fcommerce-tracker<\/code> folders under <code>wp-content\/plugins\/<\/code> (SFTP), then upload a zip built with forward-slash paths (not Windows Explorer \u201cSend to compressed folder\u201d).<\/p>\n\n<p><strong>Upgrading from older zips:<\/strong> Deactivate and delete the old <code>ecomsolvebd-tracker<\/code> folder, then install this <code>ecomsolvebd<\/code> package. Your <code>ecomso_*<\/code> settings are kept in the database.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20require%20woocommerce%3F\"><h3>Does this require WooCommerce?<\/h3><\/dt>\n<dd><p>No. Storefront tracking works on normal pages. WooCommerce-specific scripts load only when WooCommerce is active.<\/p><\/dd>\n<dt id=\"does%20this%20require%20an%20ecomsolvebd%20account%3F\"><h3>Does this require an EcomSolveBD account?<\/h3><\/dt>\n<dd><p>Yes. Create an account at <a href=\"https:\/\/ecomsolvebd.com\">ecomsolvebd.com<\/a>, connect your store, and copy the Tracking Merchant ID into the plugin settings. Saving a valid Merchant ID is how you authorize the plugin to send data to EcomSolveBD.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%3F\"><h3>What data is sent?<\/h3><\/dt>\n<dd><p>Depending on configuration: page and session identifiers, UTM \/ click IDs, device and referrer context, and (with WooCommerce) order and cart-related event payloads used for attribution and reporting in your EcomSolveBD dashboard. See the service privacy policy.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20load%20google%20analytics%3F\"><h3>Does the plugin load Google Analytics?<\/h3><\/dt>\n<dd><p>Only if you enter a GA4 Measurement ID on the plugin\u2019s GA4 settings page. Then the standard Google tag (gtag.js) is loaded from Google for automatic events. Leave the field empty to disable GA4.<\/p><\/dd>\n<dt id=\"is%20there%20a%20trial%20lock%20or%20paid%20unlock%20inside%20the%20plugin%3F\"><h3>Is there a trial lock or paid unlock inside the plugin?<\/h3><\/dt>\n<dd><p>No. All plugin code that ships in this package is available once connected. First-party DNS is configured and verified in the EcomSolveBD dashboard; the plugin syncs that status. Premium capabilities live on the EcomSolveBD service, not behind a locked local feature.<\/p><\/dd>\n<dt id=\"where%20is%20the%20source%20for%20the%20minified%20tracker%20script%3F\"><h3>Where is the source for the minified tracker script?<\/h3><\/dt>\n<dd><p>assets\/js\/ecomsolvebd.js is a minified browser bundle. The same human-readable JavaScript lives in <code>src\/tracker\/<\/code> inside this plugin (see <code>src\/BUILD.txt<\/code>). Rebuild from the EcomSolveBD monorepo with <code>npm run tracker:sync<\/code> when developing.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.66<\/h4>\n\n<ul>\n<li>WordPress.org: banner crop fix; Version header sync.<\/li>\n<\/ul>\n\n<h4>1.0.65<\/h4>\n\n<ul>\n<li>readme: Tested up to WordPress 7.1 (compatibility notice fix).<\/li>\n<\/ul>\n\n<h4>1.0.64<\/h4>\n\n<ul>\n<li>WordPress.org: plugin banner assets; Tested up to 6.8.<\/li>\n<\/ul>\n\n<h4>1.0.63<\/h4>\n\n<ul>\n<li>Security: stop forwarding spoofable client IP\/geo headers from public REST requests; derive visitor IP from REMOTE_ADDR or verified Cloudflare edge signals only.<\/li>\n<\/ul>\n\n<h4>1.0.62<\/h4>\n\n<ul>\n<li>Plugin Check: avoid apply_filters on WooCommerce core hook in cart payload builder (behavior unchanged).<\/li>\n<\/ul>\n\n<h4>1.0.61<\/h4>\n\n<ul>\n<li>WP admin: remove first-party DNS form (subdomain, CNAME table, Verify button). Configure DNS in EcomSolveBD \u2192 Integrations; plugin shows read-only status + link.<\/li>\n<\/ul>\n\n<h4>1.0.60<\/h4>\n\n<ul>\n<li>WordPress.org review: rename short <code>esb<\/code> prefix to <code>ecomso<\/code> (options, classes, script handles, REST <code>ecomso\/v1<\/code>). Legacy <code>esb\/v1<\/code> + <code>fct\/v1<\/code> routes kept for cached HTML. Auto-migrate <code>esb_*<\/code> options and order meta.<\/li>\n<\/ul>\n\n<h4>1.0.59<\/h4>\n\n<ul>\n<li>Plugin Check: set script version on GA4 gtag registration.<\/li>\n<\/ul>\n\n<h4>1.0.58<\/h4>\n\n<ul>\n<li>readme: Tested up to WordPress 7.1 (automated Plugin Check).<\/li>\n<\/ul>\n\n<h4>1.0.57<\/h4>\n\n<ul>\n<li>WordPress.org review: restore first-party DNS verify in WP admin (no locked local features).<\/li>\n<li>Plugin Check: wp_enqueue for admin feed copy, checkout meta, and WooCommerce globals (no raw <code>&lt;script&gt;<\/code> tags).<\/li>\n<li>Sanitize landing query keys in server-side precapture; REST product-ecommerce returns only publicly viewable products.<\/li>\n<li>readme: disclose EcomSolveBD API, Cloudflare DNS-over-HTTPS, and Google Analytics external services.<\/li>\n<\/ul>\n\n<h4>1.0.56<\/h4>\n\n<ul>\n<li>Plugin Check: enqueue runtime\/gtag via wp_enqueue_script; escape\/sanitize input warnings cleared (no tracking behavior change).<\/li>\n<\/ul>\n\n<h4>1.0.55<\/h4>\n\n<ul>\n<li>WordPress.org slug alignment: plugin folder, main file, and text domain are now <code>ecomsolvebd<\/code> (was <code>ecomsolvebd-tracker<\/code>). Settings (<code>ecomso_*<\/code>) unchanged.<\/li>\n<\/ul>\n\n<h4>1.0.54<\/h4>\n\n<ul>\n<li>WordPress.org Plugin Check: Plugin URI and Author URI must differ \u2014 Author URI set to WordPress.org profile.<\/li>\n<\/ul>\n\n<h4>1.0.53<\/h4>\n\n<ul>\n<li>WordPress.org readiness: ship human-readable tracker source under <code>src\/tracker\/<\/code> (Guideline 4) + BUILD notes.<\/li>\n<li>readme: Development section, Tested up to 7.0.<\/li>\n<li>Default IP-block overlay fallback copy is English; API can still return a localized message (no feature change).<\/li>\n<\/ul>\n\n<h4>1.0.52<\/h4>\n\n<ul>\n<li>begin_checkout on FunnelKit \/ CartFlows \/ CheckoutWC pages (not only Woo <code>is_checkout()<\/code> URLs). Bridge loads on those funnels; form injected late is still captured.<\/li>\n<\/ul>\n\n<h4>1.0.51<\/h4>\n\n<ul>\n<li>Checkout email\/phone detected from type, autocomplete, and common field names (not only billing_email \/ billing_phone). checkout_form_abandoned is no longer sent from the storefront.<\/li>\n<\/ul>\n\n<h4>1.0.50<\/h4>\n\n<ul>\n<li>Admin menu uses the original EcomSolveBD bag+e mark, now white on transparent (matches other WP sidebar icons).<\/li>\n<\/ul>\n\n<h4>1.0.49<\/h4>\n\n<ul>\n<li>Admin menu icon is a white SVG (same style as other WP sidebar icons) \u2014 old PNG sat on black and vanished on the dark menu.<\/li>\n<\/ul>\n\n<h4>1.0.48<\/h4>\n\n<ul>\n<li>TikTok catalog feed is RSS\/XML (g: namespace + sku_id) \u2014 same shape as Meta\/Google, for Ads Manager RSS\/XML upload.<\/li>\n<\/ul>\n\n<h4>1.0.47<\/h4>\n\n<ul>\n<li>Tracker: merchant IP block gate \u2014 blocked visitors see a full-screen contact-admin message (cannot dismiss until unblocked).<\/li>\n<\/ul>\n\n<h4>1.0.46<\/h4>\n\n<ul>\n<li>Remove storefront Attribution Debug overlay and Console debug product (use staging dashboard Attribution Debugger).<\/li>\n<\/ul>\n\n<h4>1.0.45<\/h4>\n\n<ul>\n<li>DNS verify\/delete: hot-swap ingest endpoint; pending outbox keeps same client_event_id (no lost events \/ no duplicate purchase).<\/li>\n<\/ul>\n\n<h4>1.0.44<\/h4>\n\n<ul>\n<li>Auto mode: Direct API (api.ecomsolvebd.com) until DNS verified; then custom subdomain. Shared outbox\/retry; WP REST proxy kept for back-compat.<\/li>\n<\/ul>\n\n<h4>1.0.43<\/h4>\n\n<ul>\n<li>WP admin: remove first-party DNS table \/ parity copy \u2014 verify only in EcomSolveBD Integrations; plugin shows status + link.<\/li>\n<\/ul>\n\n<h4>1.0.42<\/h4>\n\n<ul>\n<li>First-party DNS Verify moved to EcomSolveBD Integrations (Woo) \u2014 plugin syncs status from SaaS like Shopify\/Laravel\/Next.<\/li>\n<\/ul>\n\n<h4>1.0.41<\/h4>\n\n<ul>\n<li>DNS Verify: Cloudflare DoH + SaaS CNAME check when hosting dns_get_record misses a valid CNAME (common on managed WP).<\/li>\n<\/ul>\n\n<h4>1.0.40<\/h4>\n\n<ul>\n<li>On Verify: call SaaS to auto-create Cloudflare Custom Hostname (no manual Add per merchant), then require HTTPS before activating subdomain ingest.<\/li>\n<\/ul>\n\n<h4>1.0.39<\/h4>\n\n<ul>\n<li>Persist DNS verify to settings immediately (survives Clear Cache). Require HTTPS health on the tracking host before activating subdomain ingest (CNAME-only no longer switches off store_proxy onto a dead edge). Save keeps a verified host if DNS re-check flakes.<\/li>\n<\/ul>\n\n<h4>1.0.38<\/h4>\n\n<ul>\n<li>Restore checkout\/cart auto page_view (same as before): page_view + begin_checkout\/view_cart. Keep 1.0.36 storm fixes (one HTTP per event).<\/li>\n<\/ul>\n\n<h4>1.0.37<\/h4>\n\n<ul>\n<li>Checkout\/cart: skip auto page_view + clarity sync so only begin_checkout \/ view_cart fire (keeps form events). Stops duplicate master-ingest.<\/li>\n<\/ul>\n\n<h4>1.0.36<\/h4>\n\n<ul>\n<li>Fix multi-POST storms: each track() sends only that event (no outbox backlog replay); clarity sync once\/session; cache attribution-config 12h.<\/li>\n<\/ul>\n\n<h4>1.0.35<\/h4>\n\n<ul>\n<li>Fix wrong visitor geo on store_proxy: map CF visitor IP\/country to X-ESB-* (raw cf-* still not forwarded).<\/li>\n<li>Harden view_item to once per PDP page (stops 429 storms with page_view\/outbox).<\/li>\n<\/ul>\n\n<h4>1.0.34<\/h4>\n\n<ul>\n<li>Fix checkout hang: stop <code>ecomso-wc-bridge<\/code> from retry-storming <code>master-ingest<\/code> on HTTP 429 (was starving Woo AJAX).<\/li>\n<li>Tracker outbox: long backoff + drain pause on rate limit; stable client_event_id for begin_checkout\/view_cart.<\/li>\n<\/ul>\n\n<h4>1.0.27<\/h4>\n\n<ul>\n<li>Settings: clearer Merchant ID help; hide connection banner, server-side capture toggle, and console debug from UI.<\/li>\n<li>GA4: cleaner copy; keep Measurement ID guide link.<\/li>\n<li>WordPress.org polish: plugin-only notices, merchant-safe connection errors, exclude internal docs from zip.<\/li>\n<\/ul>\n\n<h4>1.0.26<\/h4>\n\n<ul>\n<li>Plugins screen: Settings link next to Deactivate.<\/li>\n<\/ul>\n\n<h4>1.0.25<\/h4>\n\n<ul>\n<li>Admin UI: English-only strings (removed hardcoded Bengali).<\/li>\n<\/ul>\n\n<h4>1.0.24<\/h4>\n\n<ul>\n<li>Product Feed: restore EcomSolveBD catalog card (<code>\/feed\/products.xml<\/code>).<\/li>\n<\/ul>\n\n<h4>1.0.23<\/h4>\n\n<ul>\n<li>Plugin display name: EcomSolveBD (removed \u201cTracker\u201d).<\/li>\n<li>Admin menu icon: white mark matching WordPress menu style.<\/li>\n<\/ul>\n\n<h4>1.0.22<\/h4>\n\n<ul>\n<li>WordPress.org readiness: LICENSE, readme Description \/ Privacy \/ external services disclosure.<\/li>\n<li>Full EcomSolveBD branding (removed leftover F-Commerce admin copy).<\/li>\n<li>Packaging guidance: keep slug <code>ecomsolvebd<\/code> stable; ship POSIX-path zips only.<\/li>\n<\/ul>\n\n<h4>1.0.21<\/h4>\n\n<ul>\n<li>Admin menu brand icon; menu position above WooCommerce.<\/li>\n<li>Link to Measurement ID &amp; API Secret guide from the GA4 settings page.<\/li>\n<\/ul>\n\n<h4>1.0.20<\/h4>\n\n<ul>\n<li>First-party tracking settings UI aligned with EcomSolveBD dashboard patterns.<\/li>\n<\/ul>\n\n<h4>1.0.19<\/h4>\n\n<ul>\n<li>First-party Auto mode: browser collect uses same-origin store REST proxy until DNS is verified, then switches to the custom tracking subdomain.<\/li>\n<\/ul>\n\n<h4>1.0.18<\/h4>\n\n<ul>\n<li>Product Feed admin: Facebook \/ TikTok \/ Google feed URLs.<\/li>\n<\/ul>\n\n<h4>1.0.17<\/h4>\n\n<ul>\n<li>Product feeds: <code>\/feed\/products.xml<\/code>, <code>\/feed\/facebook.xml<\/code>, <code>\/feed\/tiktok.xml<\/code>, <code>\/feed\/google.xml<\/code>.<\/li>\n<\/ul>\n\n<h4>1.0.16<\/h4>\n\n<ul>\n<li>GA4 Measurement ID loads standard gtag.js only (automatic events).<\/li>\n<\/ul>\n\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Server-side landing capture for click IDs \/ UTM before theme and pixels run.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Rename from legacy folder to <code>ecomsolvebd<\/code>; migrate <code>fct_*<\/code> options to <code>ecomso_*<\/code>.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Rebrand to EcomSolveBD Tracker.<\/li>\n<\/ul>","raw_excerpt":"First-party storefront tracking and WooCommerce events for EcomSolveBD \u2014 UTM, click IDs, sessions, and optional Google Analytics 4 Measurement ID.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/354315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=354315"}],"author":[{"embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ecomsolvebd"}],"wp:attachment":[{"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=354315"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=354315"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=354315"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=354315"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=354315"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=354315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}