[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fO5d2MLjT7ed8ow0ZTI7CVvcQ9I69O_nEjq1Z8jWuuEc":3},{"slug":4,"name":5,"version":6,"author":7,"author_profile":8,"description":9,"short_description":10,"active_installs":11,"downloaded":12,"rating":13,"num_ratings":13,"last_updated":14,"tested_up_to":15,"requires_at_least":16,"requires_php":17,"tags":18,"homepage":23,"download_link":24,"security_score":11,"vuln_count":13,"unpatched_count":13,"last_vuln_date":25,"fetched_at":26,"vulnerabilities":27,"developer":28,"crawl_stats":25,"alternatives":34,"analysis":131,"fingerprints":190},"tracking-for-divi","Tracking for Divi","1.1.1","Kuba Serafinowski","https:\u002F\u002Fprofiles.wordpress.org\u002Fkubawtf\u002F","\u003Cp>Ever wanted to track the built-in contact form from Divi? If you tried using Google Tag Manager’s built-in form submit events to do it you probably noticed an inflated number of events flowing.\u003C\u002Fp>\n\u003Cp>This is because the form submission event is triggered even if there are form validation errors or the server returns another error.\u003C\u002Fp>\n\u003Cp>Since Divi doesn’t provide any JavaScript events to hook into there is no straightforward way to find out if a message has actually been sent.\u003C\u002Fp>\n\u003Cp>To get around this, this plugin listens to the network communication that is happening underneath. It’s based on the same mechanism Divi itself uses.\u003C\u002Fp>\n\u003Cp>There are three options now:\u003C\u002Fp>\n\u003Col>\n\u003Cli>a \u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Ftag-platform\u002Ftag-manager\u002Fdatalayer\" rel=\"nofollow ugc\">dataLayer\u003C\u002Fa> event\u003C\u002Fli>\n\u003Cli>a \u003Ca href=\"https:\u002F\u002Fsupport.google.com\u002Fanalytics\u002Fanswer\u002F12229021\" rel=\"nofollow ugc\">Google Analytics 4 event\u003C\u002Fa> (using gtag.js)\u003C\u002Fli>\n\u003Cli>a \u003Ca href=\"https:\u002F\u002Fsupport.google.com\u002Fgoogle-ads\u002Fanswer\u002F1722022\" rel=\"nofollow ugc\">Google Ads conversion\u003C\u002Fa> (also using gtag.js)\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>You can use either one of them or event all of them together.\u003C\u002Fp>\n\u003Cp>You’ll be able to customize the dataLayer variable if you’re \u003Ca href=\"https:\u002F\u002Fdevelopers.google.com\u002Ftag-platform\u002Ftag-manager\u002Fdatalayer#rename_the_data_layer\" rel=\"nofollow ugc\">not using the standard naming\u003C\u002Fa>, and the event names, separately for dataLayer and gtag.\u003C\u002Fp>\n\u003Ch4>Data layer reporting\u003C\u002Fh4>\n\u003Cp>The structure of the object pushed to the dataLayer is the following, with the default naming:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n  event: \"contact_form_submit\",\n  formId: string,\n  postId: number,\n  formData: {\n    name: string,\n    email: string,\n    message: string,\n  },\n  allFormData?: Record\u003Cstring, unknown>, \u002F\u002F when \"Include all form data\" is enabled\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>It’s up to you to use or discard the form data.\u003C\u002Fp>\n\u003Ch4>Google Analytics 4 reporting\u003C\u002Fh4>\n\u003Cp>The Google Analytics event is sent with flattened parameters:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>gtag(\n  \"event\",\n  \"contact_form_submit\",\n  {\n    form_id: \"divi\u002Fcontact-form-0\",\n    name: \"John\",\n    email: \"john@example.com\",\n    message: \"Hello\",\n    \u002F\u002F additional fields when \"Include all form data\" is enabled\n  }\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Form data (name, email, message) is included by default. When “Include all form data” is enabled, all form fields are flattened into the event parameters.\u003C\u002Fp>\n\u003Cp>\u003Cem>This will only work if you have a \u003Ca href=\"https:\u002F\u002Fsupport.google.com\u002Fgoogle-ads\u002Fanswer\u002F11994839\" rel=\"nofollow ugc\">Google Tag\u003C\u002Fa> already deployed on the website i.e. the \u003Ccode>gtag()\u003C\u002Fcode> function is available.\u003C\u002Fem> Otherwise, you will see a warning in your console like this:\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Tracking for Divi: gtag event failed, gtag is not defined\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch4>Google Ads conversion reporting\u003C\u002Fh4>\n\u003Cp>The Google Ads conversion is sent like so:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>gtag(\n  \"event\",\n  \"conversion\",\n  {\n    send_to: \"\u003Cconversion_id>\u002F\u003Cconversion_label>\",\n  }\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>There is no default for \u003Ccode>conversion_id\u003C\u002Fcode> and \u003Ccode>conversion_label\u003C\u002Fcode> as they are always created individually in Google Ads.\u003C\u002Fp>\n\u003Cp>\u003Cem>This will only work if you have a \u003Ca href=\"https:\u002F\u002Fsupport.google.com\u002Fgoogle-ads\u002Fanswer\u002F11994839\" rel=\"nofollow ugc\">Google Tag\u003C\u002Fa> already deployed on the website i.e. the \u003Ccode>gtag()\u003C\u002Fcode> function is available.\u003C\u002Fem> Otherwise, you will see a warning in your console like this:\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Tracking for Divi: Google Ads conversion event failed, gtag is not defined\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>\u003Cstrong>Note:\u003C\u002Fstrong> This plugin hasn’t been thoroughly tested with Divi forms that redirect to a success page. The tracking works just as well, however the redirect could interrupt the tracking flow e.g. if Google Tag Manager has a lot of logic and doesn’t trigger the tags in time. The tags themselves these days \u003Ca href=\"https:\u002F\u002Fsupport.google.com\u002Fanalytics\u002Fanswer\u002F9964640#event-batching\" rel=\"nofollow ugc\">use the beacon API\u003C\u002Fa> (see \u003Ca href=\"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FBeacon_API\" rel=\"nofollow ugc\">MDN\u003C\u002Fa> for reference) so the requests shouldn’t be interrupted as long as they are fired before website unload.\u003C\u002Fp>\n","Track successful Divi contact form submissions with dataLayer events, Google Analytics, and Google Ads conversions.",100,209,0,"2026-03-04T19:33:00.000Z","6.9.4","5.3","7.4",[19,20,21,22],"datalayer","divi","tag-manager","tracking","https:\u002F\u002Fgithub.com\u002Fzizzfizzix\u002Ftracking-for-divi","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ftracking-for-divi.1.1.1.zip",null,"2026-03-15T15:16:48.613Z",[],{"slug":29,"display_name":7,"profile_url":8,"plugin_count":30,"total_installs":11,"avg_security_score":11,"avg_patch_time_days":31,"trust_score":32,"computed_at":33},"kubawtf",1,30,94,"2026-04-05T09:21:33.162Z",[35,53,75,93,114],{"slug":36,"name":37,"version":38,"author":39,"author_profile":40,"description":41,"short_description":42,"active_installs":43,"downloaded":44,"rating":13,"num_ratings":13,"last_updated":45,"tested_up_to":15,"requires_at_least":46,"requires_php":17,"tags":47,"homepage":51,"download_link":52,"security_score":11,"vuln_count":13,"unpatched_count":13,"last_vuln_date":25,"fetched_at":26},"datalayer-for-ecommerce-free","Datalayer for WooCommerce FREE","5.1.0","array.codes","https:\u002F\u002Fprofiles.wordpress.org\u002Farraycodes\u002F","\u003Cp>The Data Layer is an object that makes available in real time the information that is executed by users while browsing the WooCommerce Store.\u003C\u002Fp>\n\u003Cp>With Datalayer for WooCommerce FREE enabled, you will have some actions available in an easily readable javascript object via Google Tag Manager or code and thus evaluate the following advanced eCommerce activities:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Product Detail Impressions\u003C\u002Fli>\n\u003Cli>Related Products in Product Page\u003C\u002Fli>\n\u003Cli>Purchase\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Need all available events, all tags (Google Analytics 4, Google Ads, Meta Ads, Pinterest Ads, TikTok Ads, Microsoft Ads), all features and support for all tools?\u003Cbr \u002F>\nGet the PRO version from the Official WooCommerce Store: \u003Ca href=\"https:\u002F\u002Fwoocommerce.com\u002Fproducts\u002Fdatalayer-for-woocommerce\u002F\" rel=\"nofollow ugc\">Datalayer for WooCommerce PRO\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>Discover our demo store:\u003Cbr \u002F>\n\u003Ca href=\"https:\u002F\u002Fdemoshop.arrayevida.com.br\u002F\" rel=\"nofollow ugc\">Demo Shop\u003C\u002Fa>\u003C\u002Fp>\n","The Data Layer is an object that makes available in real time the information that is executed by users while browsing the WooCommerce Store.",700,12476,"2026-03-06T02:34:00.000Z","5.2.0",[48,19,49,50],"analytics","ga4","gtm-tag-manager","https:\u002F\u002Fwordpress.org\u002Fplugins\u002Fdatalayer-for-ecommerce-free\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fdatalayer-for-ecommerce-free.5.1.0.zip",{"slug":54,"name":55,"version":56,"author":57,"author_profile":58,"description":59,"short_description":60,"active_installs":11,"downloaded":61,"rating":62,"num_ratings":63,"last_updated":64,"tested_up_to":65,"requires_at_least":66,"requires_php":17,"tags":67,"homepage":72,"download_link":73,"security_score":74,"vuln_count":13,"unpatched_count":13,"last_vuln_date":25,"fetched_at":26},"datalayer-for-elementor","Datalayer For Elementor","1.0.1","sourei","https:\u002F\u002Fprofiles.wordpress.org\u002Fsourei\u002F","\u003Col>\n\u003Cli>Get the user location and IP address;\u003C\u002Fli>\n\u003Cli>When filling out and submitting an Elementor form it’s returned the time and date that the submission was triggered;\u003C\u002Fli>\n\u003Cli>When filling out and submitting an Elementor form, all form fields are sent to the dataLayer, following the following model:\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>{\u003Cbr \u002F>\n    “event”: “formSubmitDLFSE”,\u003Cbr \u002F>\n    “fields”: {\u003Cbr \u002F>\n        “nome”: {\u003Cbr \u002F>\n            “id”: “nome”,\u003Cbr \u002F>\n            “type”: “text”,\u003Cbr \u002F>\n            “title”: “Nome”,\u003Cbr \u002F>\n            “value”: “Name Example”,\u003Cbr \u002F>\n            “raw_value”: “Name Example”,\u003Cbr \u002F>\n            “required”: true\u003Cbr \u002F>\n        },\u003Cbr \u002F>\n        “telefone”: {\u003Cbr \u002F>\n            “id”: “telefone”,\u003Cbr \u002F>\n            “type”: “text”,\u003Cbr \u002F>\n            “title”: “Telefone”,\u003Cbr \u002F>\n            “value”: “(99) 99999-9999”,\u003Cbr \u002F>\n            “raw_value”: “(99) 99999-9999”,\u003Cbr \u002F>\n            “required”: true\u003Cbr \u002F>\n        },\u003Cbr \u002F>\n        “email”: {\u003Cbr \u002F>\n            “id”: “email”,\u003Cbr \u002F>\n            “type”: “email”,\u003Cbr \u002F>\n            “title”: “Email”,\u003Cbr \u002F>\n            “value”: “example@sourei.com.br”,\u003Cbr \u002F>\n            “raw_value”: “example@sourei.com.br”,\u003Cbr \u002F>\n            “required”: true\u003Cbr \u002F>\n        },\u003Cbr \u002F>\n        “cidade”: {\u003Cbr \u002F>\n            “id”: “cidade”,\u003Cbr \u002F>\n            “type”: “text”,\u003Cbr \u002F>\n            “title”: “Cidade”,\u003Cbr \u002F>\n            “value”: “Varginha”,\u003Cbr \u002F>\n            “raw_value”: “Varginha”,\u003Cbr \u002F>\n            “required”: true\u003Cbr \u002F>\n        },\u003Cbr \u002F>\n        “servico”: {\u003Cbr \u002F>\n            “id”: “servico”,\u003Cbr \u002F>\n            “type”: “checkbox”,\u003Cbr \u002F>\n            “title”: “Serviços interessado”,\u003Cbr \u002F>\n            “value”: “Digitalização”,\u003Cbr \u002F>\n            “raw_value”: [\u003Cbr \u002F>\n                “Digitalização”\u003Cbr \u002F>\n            ],\u003Cbr \u002F>\n            “required”: false\u003Cbr \u002F>\n        }\u003Cbr \u002F>\n    },\u003Cbr \u002F>\n    “gtm.uniqueEventId”: 21\u003Cbr \u002F>\n}\u003C\u002Fp>\n\u003Ch3>Integrated Services\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>WordPress\u003C\u002Fli>\n\u003Cli>Woocommerce\u003C\u002Fli>\n\u003Cli>Elementor\u003C\u002Fli>\n\u003Cli>Google Tag Manager\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Instalation:\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>Upload the plugin files to the wp-content\u002Fplugins folder, or install using the WordPress plugin installer.\u003C\u002Fli>\n\u003Cli>Activate the plugin.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4>Compatibility:\u003C\u002Fh4>\n\u003Cp>Requires Elementor 3.0 or later.\u003C\u002Fp>\n","Integration between the Elementor Forms and Datalayer",2440,60,2,"2022-05-31T17:39:00.000Z","5.9.13","5.0",[19,68,69,70,71],"elementor","formsubmit","google-tag-manager","woocommerce","https:\u002F\u002Fwww.sourei.com.br\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fdatalayer-for-elementor.1.0.1.zip",85,{"slug":19,"name":76,"version":77,"author":78,"author_profile":79,"description":80,"short_description":81,"active_installs":82,"downloaded":83,"rating":13,"num_ratings":13,"last_updated":84,"tested_up_to":85,"requires_at_least":86,"requires_php":87,"tags":88,"homepage":91,"download_link":92,"security_score":11,"vuln_count":13,"unpatched_count":13,"last_vuln_date":25,"fetched_at":26},"DataLayer for GTM and Matomo","1.0.2","Openmost","https:\u002F\u002Fprofiles.wordpress.org\u002Fopenmost\u002F","\u003Cp>Elevate your website analytics with the DataLayer plugin!\u003Cbr \u002F>\nThis robust plugin creates a fully populated and standardized dataLayer object, ensuring seamless integration with both Google Tag Manager and Matomo Tag Manager.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Instant Setup: Automatically generates and populates a dataLayer object with essential website and user interaction data.\u003C\u002Fli>\n\u003Cli>Universal Compatibility: Works flawlessly with Google Tag Manager and Matomo Tag Manager, making it easier to manage your tagging needs.\u003C\u002Fli>\n\u003Cli>Customizable Data: Easily add or modify data points to fit your specific tracking requirements.\u003C\u002Fli>\n\u003Cli>Performance Optimized: Lightweight and optimized for speed to ensure your site remains fast and responsive.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Get a quick look at all the generated structures!\u003C\u002Fp>\n\u003Ch4>Archive page `dataLayer` structure\u003C\u002Fh4>\n\u003Cp>Easy access to your archive data with a standard event name and subject.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"view_archive_date\", \u002F\u002F_date may be replaces with _tax value\n    \"page\": {\n        \"type\": \"archive\",\n        \"title\": \"january 2025 - Example\",\n        \"url\": \"https:\u002F\u002Fexample.com\u002F2025\u002F01\",\n        \"path\": \"2025\u002F01\",\n        \"locale\": \"en_US\",\n        \"archive_type\": \"date\",\n        \"taxonomy\": false,\n        \"post_type\": false,\n        \"date\": {\n            \"year\": 2025,\n            \"month\": 1,\n            \"day\": null\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Author page `dataLayer` structure\u003C\u002Fh4>\n\u003Cp>Easy access to all author details on his archive page.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"view_author\",\n    \"page\": {\n        \"id\": 1,\n        \"nickname\": \"openmost\",\n        \"display_name\": \"openmost\",\n        \"first_name\": \"Ronan\",\n        \"last_name\": \"HELLO\",\n        \"description\": \"The creator of this super plugin\",\n        \"type\": \"author\",\n        \"url\": \"https:\u002F\u002Fexample.com\u002Fauthor\u002Fopenmost\",\n        \"path\": \"author\u002Fopenmost\",\n        \"title\": \"Author: openmost\"\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Error page `dataLayer` structure\u003C\u002Fh4>\n\u003Cp>This \u003Ccode>dataLayer\u003C\u002Fcode> structure allows you to easily track the 404 error and detect the referring page that led to this error.\u003Cbr \u002F>\nWhat a great trick yeah?\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"view_error_404\",\n    \"page\": {\n        \"type\": \"error\",\n        \"title\": \"Page not found - Website\",\n        \"url\": \"https:\u002F\u002Fexample.com\u002Furl-that-encountered-a-404-error\",\n        \"path\": \"\u002Furl-that-encountered-a-404-error\",\n        \"locale\": \"en_US\",\n        \"error_type\": \"404\",\n        \"http_status_code\": 404\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Search results page `dataLayer` structure\u003C\u002Fh4>\n\u003Cp>The search key in this object allows you to get the search term and total results to detect invalid searches.\u003Cbr \u002F>\nVery useful for Matomo Tag Manager, and nice hack for Google Tag Manager.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"view_search_results\",\n    \"page\": {\n        \"type\": \"search\",\n        \"url\": \"https:\u002F\u002Fexample.com\",\n        \"path\": \"\",\n        \"title\": \"You searched for Demo - Example\",\n        \"locale\": \"en_US\"\n    },\n    \"search\": {\n        \"search\": \"Demo\",\n        \"search_cat\": \"\",\n        \"search_count\": 3,\n        \"query\": \"Demo\",\n        \"found_posts\": 3,\n        \"post_count\": 3\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Home, Post Type `dataLayer` structure (blog posts, custom post type single page)\u003C\u002Fh4>\n\u003Cp>The following structure is generated for a single post page, but it automatically adapts to your custom post type, page, etc.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"view_single_post\",\n    \"page\": {\n        \"type\": \"post\",\n        \"id\": 1,\n        \"url\": \"https:\u002F\u002Fexample.com\u002Fblog\u002Fsuper-article-path\",\n        \"path\": \"\u002Fblog\u002Fsuper-article-path\",\n        \"title\": \"Super article title | Example\",\n        \"locale\": \"en_US\",\n        \"is_home\": false,\n        \"is_front_page\": false,\n        \"post_name\": \"super-article-path\",\n        \"post_title\": \"Super article title\",\n        \"post_excerpt\": \"\",\n        \"post_status\": \"publish\",\n        \"post_date\": \"2024-08-17 13:30:00\",\n        \"post_date_gmt\": \"2024-08-17 13:30:00\",\n        \"post_modified\": \"2024-08-17 13:30:00\",\n        \"post_modified_gmt\": \"2024-08-17 13:30:00\",\n        \"post_type_name\": \"post\",\n        \"post_type_label\": \"Posts\",\n        \"post_type\": {\n            \"name\": \"post\",\n            \"label\": \"Posts\",\n            \"label_singular\": \"Post\",\n            \"label_plural\": \"Posts\",\n            \"description\": \"The super post type description\"\n        },\n        \"guid\": \"https:\u002F\u002Fexample.com\u002F?p=1\",\n        \"post_mime_type\": false,\n        \"comment_status\": \"open\",\n        \"comment_count\": \"0\",\n        \"author\": {\n            \"id\": 1,\n            \"nickname\": \"openmost\",\n            \"display_name\": \"openmost\",\n            \"first_name\": \"Ronan\",\n            \"last_name\": \"HELLO\",\n            \"description\": \"The creator of this super plugin\"\n        },\n        \"taxonomies\": {\n            \"category\": {\n                \"name\": \"category\",\n                \"label\": \"Categories\",\n                \"description\": \"\",\n                \"object_type\": [\n                    \"post\"\n                ],\n                \"terms\": {\n                    \"Uncategorized\": {\n                        \"term_id\": 1,\n                        \"slug\": \"uncategorized\",\n                        \"name\": \"Uncategorized\",\n                        \"term_group\": 0,\n                        \"term_taxonomy_id\": 1,\n                        \"taxonomy\": \"category\",\n                        \"description\": \"\",\n                        \"parent\": 0,\n                        \"count\": 1,\n                        \"filter\": \"raw\"\n                    }\n                },\n                \"primary_term\": [] \u002F\u002FFilled only with YoastSEO plugin\n            }\n        },\n        \"category\": [\n            \"Uncategorized\"\n        ],\n        \"page_template\": \"\"\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Term and taxonomy page `dataLayer` structure\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"view_archive_category\", \u002F\u002F this event name changed for every taxonomy\n    \"page\": {\n        \"type\": \"archive\",\n        \"title\": \"Uncategorized archives - Example\",\n        \"url\": \"https:\u002F\u002Fexample.com\u002Fblog\u002Fcategory\u002Funcategorized\",\n        \"path\": \"blog\u002Fcategory\u002Funcategorized\",\n        \"locale\": \"en_US\",\n        \"archive_type\": \"taxonomy\",\n        \"taxonomy\": \"category\",\n        \"post_type\": \"category\",\n        \"date\": {\n            \"year\": null,\n            \"month\": null,\n            \"day\": null\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Pagination `dataLayer` structure\u003C\u002Fh4>\n\u003Cp>The \u003Ccode>pagination\u003C\u002Fcode> object structure is automatically added to all pages that have pagination.\u003C\u002Fp>\n\u003Cp>Easy access to your pagination data, detect if users are using your pagination as much as you want.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    pagination: {\n        \"posts_per_page\": 10,\n        \"post_count\": 1,\n        \"paged\": true,\n        \"page_number\": 2,\n        \"max_num_pages\": 5\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Authenticated user `dataLayer` structure\u003C\u002Fh4>\n\u003Cp>The \u003Ccode>user\u003C\u002Fcode> object is automatically added to all page when user is logged in.\u003C\u002Fp>\n\u003Cp>User hashed data with SHA256 is very useful for GDPR consent with Google Ads services and user provided data.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    user: {\n        \"id\": 1,\n        \"user_login\": \"openmost\",\n        \"user_nicename\": \"Openmost\",\n        \"user_email\": \"no-reply@openmost.io\",\n        \"user_registered\": \"2024-01-01 12:00:00\",\n        \"display_name\": \"openmost\",\n        \"roles\": [\n            \"administrator\"\n        ],\n        \"sha256_id\": \"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b\",\n        \"sha256_user_login\": \"b2754b994c2fb636d1943ac0170f4ea192a891fb0f09cfdd100a9ffa983f053d\",\n        \"sha256_user_email\": \"679d031c25e557ee84ca86ecaf333ccd8d3d1a3900ee728da83d79a819daf535\"\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Plugin : Contact Form 7 `dataLayer` structure\u003C\u002Fh4>\n\u003Cp>This plugin automatically detects the use of WP Contact Form 7.\u003Cbr \u002F>\nNo configuration needed.\u003C\u002Fp>\n\u003Cp>Form submitted\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"wpcf7_submit\",\n    \"wpcf7_form_id\": 145,\n    \"wpcf7_form_detail\": {} \u002F\u002F See wpcf7_form_details below\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Form with invalid fields\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"wpcf7_invalid\",\n    \"wpcf7_form_id\": 145,\n    \"wpcf7_form_detail\": {} \u002F\u002F See wpcf7_form_details below\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Form spamming detected\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"wpcf7_spam\",\n    \"wpcf7_form_id\": 145,\n    \"wpcf7_form_detail\": {} \u002F\u002F See wpcf7_form_details below\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Email sent successfully\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"wpcf7_mail_sent\",\n    \"wpcf7_form_id\": 145,\n    \"wpcf7_form_detail\": {} \u002F\u002F See wpcf7_form_details below\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Failed to send mail\u003C\u002Fp>\n\u003Cpre>\u003Ccode>{\n    \"event\": \"wpcf7_mail_failed\",\n    \"wpcf7_form_id\": 145,\n    \"wpcf7_form_detail\": {} \u002F\u002F See wpcf7_form_details below\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>As each event handles \u003Ccode>wpcf7_form_details\u003C\u002Fcode>, here is an example of the object values when the form is submitted with invalid fields.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\"wpcf7_form_detail\": {\n        \"contactFormId\": 145,\n        \"pluginVersion\": \"6.0.3\",\n        \"contactFormLocale\": \"en_US\",\n        \"unitTag\": \"wpcf7-xxxxxx\",\n        \"containerPostId\": 0,\n        \"status\": \"validation_failed\",\n        \"inputs\": [\n            {\n                \"name\": \"your-message\",\n                \"value\": \"\"\n            },\n            {\n                \"name\": \"your-name\",\n                \"value\": \"\"\n            },\n            \u002F\u002F All other inputs\n        ],\n        \"formData\": {},\n        \"apiResponse\": {\n            \"contact_form_id\": 145,\n            \"status\": \"validation_failed\",\n            \"message\": \"One or more fields contain an error. Please check and try again.\",\n            \"invalid_fields\": [\n                {\n                    \"field\": \"your-name\",\n                    \"message\": \"Please complete this field..\",\n                    \"idref\": \"last_name\",\n                    \"error_id\": \"wpcf7-f145-o1-ve-your-name\"\n                },\n                {\n                    \"field\": \"your-first-name\",\n                    \"message\": \"Please complete this field.\",\n                    \"idref\": \"first_name\",\n                    \"error_id\": \"wpcf7-f145-o1-ve-your-first-name\"\n                },\n                \u002F\u002F All other invalid fields\n            ],\n            \"posted_data_hash\": \"\",\n            \"into\": \"#wpcf7-f145-o1\"\n        }\n    }\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4>Plugin : WP Forms `dataLayer` structure\u003C\u002Fh4>\n\u003Cpre>\u003Ccode>{\n    event: 'wp_forms_submit',\n    wp_forms_form_detail: {} \u002F\u002F the HTML tag found in DOM\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n","Add contextual information to dataLayer for GTM and MTM",70,1571,"2025-04-16T15:08:00.000Z","6.8.5","6.0","7.2",[48,19,70,89,90],"gtm","matomo","https:\u002F\u002Fgithub.com\u002Fopenmost\u002Fdatalayer","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fdatalayer.1.0.3.zip",{"slug":94,"name":95,"version":96,"author":97,"author_profile":98,"description":99,"short_description":100,"active_installs":101,"downloaded":102,"rating":11,"num_ratings":30,"last_updated":103,"tested_up_to":104,"requires_at_least":105,"requires_php":106,"tags":107,"homepage":111,"download_link":112,"security_score":11,"vuln_count":13,"unpatched_count":13,"last_vuln_date":25,"fetched_at":113},"tracking-code-for-google-tag-manager","Tracking Code for Google Tag Manager","1.0.0","Clayton Collie","https:\u002F\u002Fprofiles.wordpress.org\u002Fclaytoncollie\u002F","\u003Cp>Tracking Code For Google Tag Manager is a simple, lightweight WordPress plugin for inserting your Google Tag Manager tracking code. The plugin does one thing and one thing only; prints the standard Google Tag Manager tacking script to the \u003Ccode>\u003Chead>\u003C\u002Fcode> of your website. To insert your container ID, navigate to Settings > General and then scroll to the bottom of the page.\u003C\u002Fp>\n\u003Ch3>Composer\u003C\u002Fh3>\n\u003Cpre>\u003Ccode>composer require claytoncollie\u002Ftracking-code-for-google-tag-manager\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Filters\u003C\u002Fh3>\n\u003Cp>If you want to set the container ID without using the wp-admin user interface, use the filter below.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>add_filter(\n    'tracking_code_for_google_tag_manager_id',\n    \u002F**\n     * Set Google Tag Manager container ID.\n     *\n     * @param string $container_id Container ID.\n     *\n     * @return string\n     *\u002F\n    function ( $container_id ) {\n        return 'GTM-7654321';\n    }\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Contributing\u003C\u002Fh3>\n\u003Cp>While the purpose of this plugin is to be very tightly scoped, issues and pull requests are welcome, but I do not guarantee that everything will be merged or support will be given.\u003C\u002Fp>\n\u003Cp>https:\u002F\u002Fgithub.com\u002Fclaytoncollie\u002Ftracking-code-for-google-tag-manager\u003C\u002Fp>\n","Simple, lightweight solution for inserting your Google Tag Manager Universal tracking code.",20,1362,"","6.6.0","5.2","5.6",[108,109,70,21,110],"container","google","tracking-code","https:\u002F\u002Fgithub.com\u002Fclaytoncollie\u002Ftracking-code-for-google-tag-manager","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ftracking-code-for-google-tag-manager.1.0.0.zip","2026-03-15T10:48:56.248Z",{"slug":115,"name":116,"version":117,"author":118,"author_profile":119,"description":120,"short_description":121,"active_installs":122,"downloaded":123,"rating":11,"num_ratings":124,"last_updated":125,"tested_up_to":85,"requires_at_least":126,"requires_php":17,"tags":127,"homepage":129,"download_link":130,"security_score":11,"vuln_count":13,"unpatched_count":13,"last_vuln_date":25,"fetched_at":26},"tag-syncer","TagSyncer – Free Google Tag Manager Plugin for WordPress","1.1.2","Involvz","https:\u002F\u002Fprofiles.wordpress.org\u002Finvolvz\u002F","\u003Cp>TagSyncer enables you to add Google Tag Manager (GTM) to your WordPress site with up to two GTM IDs and empowers tracking options like scroll depth, Contact Form 7 submissions, Elementor forms, and WooCommerce events. It ensures that analytics stay intact by notifying you when GTM IDs are removed.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Key Features\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Col>\n\u003Cli>\n\u003Cp>\u003Cstrong>Google Tag Manager (GTM) Integration\u003C\u002Fstrong>\u003Cbr \u002F>\nAllows insertion of up to two GTM IDs.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Scroll Tracking\u003C\u002Fstrong>\u003Cbr \u002F>\nTracks scroll depth on pages. Enable this feature in the \u003Cstrong>Scroll Tracking Settings\u003C\u002Fstrong> tab in the plugin settings.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>GTM ID Removal Notification\u003C\u002Fstrong>\u003Cbr \u002F>\nProvides a dashboard notification and sends an email to the WordPress administrator when a GTM ID is removed.\u003Cbr \u002F>\nUpdated with improved subject and body formatting for clarity.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Contact Form 7 Tracking\u003C\u002Fstrong>\u003Cbr \u002F>\nTracks submissions from Contact Form 7 forms. Enable this feature in the \u003Cstrong>Integrations\u003C\u002Fstrong> tab.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Elementor Form Tracking\u003C\u002Fstrong>\u003Cbr \u002F>\nTracks form submissions from Elementor forms. Enable this feature in the \u003Cstrong>Integrations\u003C\u002Fstrong> tab.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>WooCommerce Tracking\u003C\u002Fstrong>\u003Cbr \u002F>\nTracks WooCommerce eCommerce events with dataLayer support, capturing product views, add-to-cart actions, and purchases. Enable this in the \u003Cstrong>Integrations\u003C\u002Fstrong> tab.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>dataLayer Events for Custom Tags\u003C\u002Fstrong>\u003Cbr \u002F>\nAutomatically pushes dataLayer events, allowing you to create custom GTM tags to track various interactions on your website.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003Cli>\n\u003Cp>\u003Cstrong>Improved UI\u002FUX\u003C\u002Fstrong>\u003Cbr \u002F>\nRefreshed styling for a modern and user-friendly interface.\u003C\u002Fp>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3>External Services\u003C\u002Fh3>\n\u003Cp>This plugin relies on the external service \u003Cstrong>Google Tag Manager(GTM)\u003C\u002Fstrong> to enable advanced website tracking and analytics capabilities.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>What the service is and what it is used for\u003C\u002Fstrong>\u003Cbr \u002F>\nGoogle Tag Manager is a tag management system that allows users to deploy and manage marketing tags (such as analytics, conversion tracking, and remarketing tags) on their website without editing code directly. This plugin uses Google Tag Manager to integrate tracking features like scroll depth, form submissions, and WooCommerce events.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>What data is sent and when\u003C\u002Fstrong>\u003Cbr \u002F>\n– The plugin sends the configured Google Tag Manager ID to the Google Tag Manager service to load the appropriate container.\u003Cbr \u002F>\n– When enabled, the plugin may also send tracking events such as form submissions, scroll depth, and WooCommerce events to Google Tag Manager.\u003Cbr \u002F>\n– This data is used for creating custom tags, monitoring website interactions, and generating insights.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Links to the service’s terms of service and privacy policy\u003C\u002Fstrong>\u003Cbr \u002F>\n– \u003Ca href=\"https:\u002F\u002Fwww.google.com\u002Fanalytics\u002Ftag-manager\u002Fuse-policy\u002F\" rel=\"nofollow ugc\">Google Tag Manager Terms of Service\u003C\u002Fa>\u003Cbr \u002F>\n– \u003Ca href=\"https:\u002F\u002Fpolicies.google.com\u002Fprivacy\" rel=\"nofollow ugc\">Google Privacy Policy\u003C\u002Fa>\u003C\u002Fp>\n\u003Ch3>Additional Information\u003C\u002Fh3>\n\u003Cp>\u003Cem>For advanced usage and custom GTM tag creation, refer to \u003Ca href=\"https:\u002F\u002Fwordpress.org\u002F\" rel=\"ugc\">WordPress\u003C\u002Fa> documentation.\u003C\u002Fem>\u003C\u002Fp>\n","Easily integrate Google Tag Manager with tracking for scroll events, forms, and WooCommerce, all manageable from the WordPress dashboard.",10,917,3,"2025-11-07T11:31:00.000Z","4.0",[128,68,70,22,71],"contact-form-7","https:\u002F\u002Fwww.tagsyncer.com\u002F","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Ftag-syncer.zip",{"attackSurface":132,"codeSignals":169,"taintFlows":180,"riskAssessment":181,"analyzedAt":189},{"hooks":133,"ajaxHandlers":165,"restRoutes":166,"shortcodes":167,"cronEvents":168,"entryPointCount":13,"unprotectedCount":13},[134,140,144,148,152,157,161],{"type":135,"name":136,"callback":137,"file":138,"line":139},"action","admin_menu","tracking_for_divi_add_plugin_page","src\\Admin\\SettingsPage.php",50,{"type":135,"name":141,"callback":142,"file":138,"line":143},"admin_init","tracking_for_divi_page_init",51,{"type":135,"name":145,"callback":146,"priority":122,"file":147,"line":31},"et_pb_contact_form_submit","capture_submission","src\\FormSubmissionHandler.php",{"type":135,"name":149,"callback":150,"priority":30,"file":147,"line":151},"init","start_output_buffer",34,{"type":135,"name":153,"callback":154,"file":155,"line":156},"wp_enqueue_scripts","closure","tracking-for-divi.php",45,{"type":135,"name":158,"callback":159,"file":155,"line":160},"plugins_loaded","anonymous",79,{"type":135,"name":162,"callback":163,"file":155,"line":164},"admin_enqueue_scripts","enqueue_admin_script",88,[],[],[],[],{"dangerousFunctions":170,"sqlUsage":171,"outputEscaping":173,"fileOperations":13,"externalRequests":13,"nonceChecks":13,"capabilityChecks":13,"bundledLibraries":179},[],{"prepared":13,"raw":13,"locations":172},[],{"escaped":174,"rawEcho":30,"locations":175},13,[176],{"file":138,"line":177,"context":178},73,"raw output",[],[],{"summary":182,"deductions":183},"Based on the static analysis and vulnerability history provided, the 'tracking-for-divi' plugin v1.1.1 appears to have a strong security posture. The absence of any identified vulnerabilities in its history and the lack of critical signals in the code analysis, such as dangerous functions, raw SQL queries, or unsanitized taint flows, are highly positive indicators. The plugin also demonstrates good practices by using prepared statements for all SQL queries and a high percentage of properly escaped outputs, minimizing the risk of common web vulnerabilities.\n\nHowever, a few areas warrant attention. The complete absence of nonce checks and capability checks on all entry points, coupled with the lack of any authentication checks on AJAX handlers and permission callbacks for REST API routes (though the count is zero, the absence of checks is notable), presents a potential blind spot. While the attack surface is currently zero, if any new entry points were introduced without proper checks, they could be immediately exploitable. The plugin's reliance on 100% prepared statements and 93% escaped output is commendable, but it's crucial to maintain this rigor as the plugin evolves. The overall security is good, but the lack of explicit security checks on potential future entry points is a minor concern.\n\nIn conclusion, 'tracking-for-divi' v1.1.1 exhibits excellent security hygiene with no known vulnerabilities and robust coding practices for its current features. The main weakness lies in the absence of inherent security checks (nonces, capabilities) on its (currently non-existent) entry points. This suggests the plugin is developed with security in mind, but future development should prioritize incorporating these checks if new functionalities are added that expose entry points.",[184,187],{"reason":185,"points":186},"No nonce checks on entry points",5,{"reason":188,"points":186},"No capability checks on entry points","2026-03-16T20:55:25.454Z",{"wat":191,"direct":201},{"assetPaths":192,"generatorPatterns":195,"scriptPaths":196,"versionParams":198},[193,194],"\u002Fwp-content\u002Fplugins\u002Ftracking-for-divi\u002Fjs\u002Fdist\u002Fassets\u002Findex.js","\u002Fwp-content\u002Fplugins\u002Ftracking-for-divi\u002Fjs\u002Fdist\u002Fassets\u002Findex.css",[],[197],"\u002Fwp-content\u002Fplugins\u002Ftracking-for-divi\u002Fjs\u002Fdist\u002Fjs\u002Fclient\u002Fmain.ts",[199,200],"tracking-for-divi\u002Fstyle.css?ver=","tracking-for-divi\u002Fscript.js?ver=",{"cssClasses":202,"htmlComments":204,"htmlAttributes":205,"restEndpoints":215,"jsGlobals":216,"shortcodeOutput":218},[203],"tracking-for-divi-settings-page",[],[206,207,208,209,210,211,212,213,214],"data-tracking-for-divi-send-datalayer","data-tracking-for-divi-datalayer-variable","data-tracking-for-divi-datalayer-event","data-tracking-for-divi-include-all-data","data-tracking-for-divi-send-gtag","data-tracking-for-divi-gtag-event","data-tracking-for-divi-send-gads-conversion","data-tracking-for-divi-gads-conversion-id","data-tracking-for-divi-gads-conversion-label",[],[217],"TRACKING_FOR_DIVI_OPTIONS",[]]