This plugin hasn’t been tested with the latest 3 major releases of WordPress. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress.

Tracking Code for (on WooCommerce checkout)


CJ Affiliate (previously Commision Junction) is an affiliate service that can bring money and customers to your website. Learn more at

This plugin sends the necessary data to participate in the CJ Affiliate network. Tracks WooCommerce activity and successful Gravity Forms submission.

WooCommerce or Gravity Forms is required, if you want the tracking code added to a different plugin, I can explain to your developer what they need to do to code this up. You may create an issue to track new integrations at the github repo.


  • The settings page. Once filled out, the tracking code will be added to the thank you page of each order placed.


1) Add the plugin through the ‘Plugins’ menu in WordPress

2) When prompted, activate the plugin

3) Go to Settings > CJ Tracking Code

4) Enter in your account info

5) The tracking data will then be sent for WooCommerce customers, and on successful Gravity Form submissions.
Supports WooCommerce 3.0+, and Gravity Forms 2.4+

Extending the Plugin

The following filter is available for extending the plugin


This filter allows you to conditionally determine what the CID, type, and tag ID should be. This is useful when you have want to use multiple tag IDs and types.

Basic Example:

add_filter('cj_settings', function($account_data, $submission_method, $order){

    // make changes to $account_data here

    return $account_data;
}, 10, 3);

Example 2:

add_filter('cj_settings', function($settings, $submission_method, $order_or_form_data, $order_or_form_id){

    // make changes to the settings here
    // Note: return false if you don't want to send any data to CJ for this transaction

    return $settings;
}, 10, 4);

The first parameter is an array containing all of the settings to filter.
More settings may be added later, but the array currently holds:

  • ‘enterprise_id’ – the enterprise ID
  • ‘action_tracker_id’ – the action tracker id
  • ‘tag_id’ – no longer used
  • ‘cid’ – no longer used
  • ‘type’ – no longer used
  • ‘notate_urls’ – no longer used
  • ‘notate_order_data’ – should we add additional info to order notes (on supported integrations)
  • ‘other_params’ – Not currently used. If ever used again it will contain additional items to submit to CJ. These will appear in the CJ dashboard.
  • ‘storage_mechanism’ – Either ‘woo_session’ or ‘cookies’. Both options work. There is normally no need to change this.

The second parameter will be either “woocommerce” or “gravity_forms” depending on which one initiated everything (more integrations will be added later as they’re requested).

Based on the above parameter the next 2 will either be the form data and form id or the order data and order id.

If you need me to add additional filters, please open up a new issue at


June 27, 2020
I started using this a few days ago for gravity forms and there were a few slight issues. I contacted Russell, the developer for this plugin, and he was so quick to communicate over email and make some adjustments for the plugin to make it work as needed! I have never received such quick support and quick updates to the plugin to make it work. 5 stars to Russell and the WP Overwatch team
July 29, 2019
CJ did not want to take the time to write an integration for WooCommerce (used by 2 Million plus websites), but thankfully Russell at WP Overwatch did. If the CJ Technical integration team tells you to develop custom code in order for their tracking code to work, then you need this plugin. Just install, then add your Tag ID, CID, and Type. DONE! Worked for me and CJ confirmed all the order details are passing thru. Thank you for making this plugin available.
Read all 3 reviews

Contributors & Developers

“Tracking Code for (on WooCommerce checkout)” is open source software. The following people have contributed to this plugin.



version 3.3

  • Add server side cookie implementation
  • Allow you to choose which implementation you would like to use. See the settings page for more info on the different implementations.
  • Fix bug where in certain circumstances it was trying to set the cookie based on the value of the cje GET parameter instead of the cjevent parameter
  • Added the cj_cookie_duration filter
  • Don’t return the amount to CJ as it is no longer required, thanks @brittonk for the fix
  • Don’t add notes to WooCommerce orders saying an order came from a CJ referral when it didn’t
  • The “Turn on all available integrations” toggle switch can be disabled now
  • Added an expiremntal option for better compatability with Gravity Forms. When selected an alternate method will be used to send data to CJ that won’t require breaking the ability for Gravity Forms to redirect users after a form is submitted
  • WordPress 6 compatibility

version 3.2

Add tag ID

version 3.1

Fix a problem in 3.0 that was breaking all Ajax requests until the cj settings were saved

version 3.0

CJ has new documentation they have been handing out that is completely different from what they have online.
This update follows the new documentation, introduces new fields that will need to be filled out on the settings page, and is an all around overhaul of how the tracking code is implemented. This version has been verified with the lead client integration engineer at CJ to be in compliance with their systems. All users will need to recertify themselves with the new system.

version 2.12

Allow Google Tag Manager and other scripts to read the cjevent cookie (HttpOnly=false)
Always use non-www version of domain in cookies
Remove extraneous CSS in the settings page
Remove “Did not recieve a PublisherID” notice from WooCommerce notes. CJ no longer seems to use a publisher ID (but if you do still have a setup that uses them, they will still be recorded).
On the settings page add inline CSS to make sure the summary elements dropdowns arrows always appear.
Add method=IMG to the conversion tag URL. Let me know if CJ is asking you to use a different tracking method and I can add support for it.

version 2.11

Make the cookie storage mechanism work with caching plugins
And make it the default storage mechanism
Add a setting to change the duration of the cjevent cookie
Add a settings link on the plugin page
The contact form now outputs some of the debug info into a nice table instead of using var_dumps
Display a warning when WPFC_CACHE_QUERYSTRING is true (from the fastest cache plugin), and makes it easier to add compatibility features/warnings in the future
Minor textual changes to the settings page

version 2.10

Puts the plugin in conformance with CJ’s new rules on what characters are allowed in item names
In WordPress 5.5+ the plugin will only send data to CJ in production environments (the environment is determined by the wp_get_environment_type function)
Gravity Form Integration fixes:
* The setting to limit which forms are used wasn’t saving
* It was sending a CJ Event of 1 instead of the actual CJ Event
* Decimal numbers were being ignored when calculating the coupon discount
* It wasn’t telling you which checkbox/radio button were selected before

version 2.9

More bug fixes for the Gravity Forms integration
The gravity Forms integration should no longer be using the form ID for the item name. Previously it was used on unfilled out fields and radio fields.

version 2.8

Gravity Forms integration changes:
* Stop reporting fields that were not filled in
* Add support for the Gravity Forms coupon add-on
* Fixes some items that were not getting reported correctly
* Add a note to form entries of the CJ URL used

WooCommerce Integration changes:
* Compatibility with WooCommerce product bundles plugin

Settings page changes:
* Hide WooCommerce or Gravity Form options when the plugin is not enabled
* Send additional information when submitting a ticket (plugin versions, multisite info)
* Replace some checkboxes with toggle switches
* Add “Remove Plugin Data” button
* Other misc improvements

version 2.7

Add fix to trigger WooCommerce Sessions on non-WooCommerce pages (for storing the publisherCID and cjevent).
Change the duration of cookies in the Gravity Forms integration to 120 days.
When the cookie storage mechanism was used, the publishercid was not getting retreived.

version 2.6

Add cj_account_info filter, for cases where the account info needs to change depending on what is being purchased

version 2.5

Add contact us form and add mention of Hosting Utilities (my new suite of tools for managing WordPress sites).

version 2.4

Makes cookies last for 120 days when using cookie storage instead of the default storage mechanism (CJ requires the cookies to last for 120 days).

version 2.3

Fixes a security issue where the cjevent was not being properly escaped.
Also, this update adds an alternate storage mechanism to aid in debugging problems.

version 2.2

Allow CJ tracking codes to be turned off for gravity forms or WooCommerce. Previously the tracking code was always added if the associated plugin was enabled.
Also fixes sending additional query parameter to CJ. I don’t think that feature was ever actually working.
Fixing unit tests

version 2.1

Fixing a fatal bug. The endswith function was never defined causing issues.

version 2.0

Adding Gravity Forms support

version 1.4.0

The item name is now set to SKU code if present, otherwise, the product title is used
Grabbing the cjevent is now a case-insensitive process

version 1.3.0

Added support for additional currencies. Thanks to kennyhunter16, the currency is now detected from the order that was placed.

version 1.2.0 added some new required fields. This update brings the plugin into conformation with their documentation at

version 1.1.0

Orders that originated from are now marked as such in the order notes

version 1.0.0

Initial commit