If-So Dynamic Content Personalization


Personalize any content! Add or replace content according to the visitor’s profile or interaction with the site.

No coding required!


  • Condtional triggers – works with every page builder – Watch
  • Condtional Gutenberg blocks – Watch
  • Condtional Elementor elements – Watch
  • Dynamic Keyword Insertion (DKI) shortcodes – Watch

Watch a short video (1:36):


  • Simple to use – No coding is required
  • Works with any page builder
  • 100% compatible with all caching plugins (no need to disable the cache)
  • A simple way to improve engagement and conversion rates
  • New! Conditional Gutenberg Blocks and Elementor Widgets



All page builder users:

  1. Create a trigger
  2. Select a condition and set the personalized content version
  3. Optional – create more dynamic versions and set the default content
  4. Paste the shortcode wherever you want to display the content
    Every time a page with the shortcode is loaded, one of the content versions will be displayed accordingly.

Learn more >>

Gutenberg and Elementor users

  1. Select the block or element
  2. On the side menu, select the condition to display the block/element

– More about conditional Elementor Elements >>
– More about conditional Gutenberg Blocks >>



If-So offers a wide range of conditions. Here are examples of our most implemented conditions.

Most popular

  1. Geolocation – Show location-based content (examples >>)
  2. Google Ads – Show content based on the user’s search term on Google Ads or related to the Facebook Ad the user was referred from (examples >>)
  3. UTM Parameters – Show dynamic content based on UTM parameters or other query strings (examples >>)

More usage examples >>


  • City
  • State
  • Country
  • Continent
  • Time zone

User Behavior

  • Browser Language
  • Returning Visitor (pro)
  • Device Type
  • Logged-in User
  • Days Since User Registration (pro)
  • Pages Visited (pro)
  • Referral Source (pro)
  • Browser Type (pro)
  • Operating System (pro)
  • Number of Version Views (pro)

Date & Time

  • Start & End Date (pro)
  • Schedule (pro)
  • Day of the Month (pro)

Marketing & Advertising

  • Dynamic Link (pro)
  • Page URL (pro)
  • UTM Parameters (pro)
  • Google Ads / Facebook Ads (pro)


  • Products in the Cart (pro)
  • Products Purchased (pro)
  • Units in Stock (pro)
  • Total Spent (pro)
  • Average Order Value (pro)
  • Customer Details (pro)

Integrations (pro)

  • WooCommerce Subscriptions
  • WooCommerce Memberships
  • MemberPress
  • WishList Member
  • WP Job Manager
  • LearDash
  • Easy Digital Downloads
  • AffiliateWP
  • Weglot

All conditions >>


Built-in stats

Get clear insights into your content performance! See real-time results with a built-in analytics system – how many times each version was displayed and how it affected the conversion rate.



If-So is more than just an If-Then personalization solution. We consistently add new features so that no matter what your need is, you will be able to achieve it with If-So.

Audiences (segments)
Assign users into predefined audiences based on the user’s interaction with the site and then show content based on the user’s audience.
Learn more >>

User self-selection form:
Allow users to select the content they will see by assigning themselves to an audience (segment).
Learn more >>

Conditional pop-ups
Create pop-ups that will be displayed based on any If-So condition.
Learn more >>

Custom user profile fields (for logged-in users)
Create a new field in the user’s profile, assign a value to that field, and show content based on the value.
Learn more >>

Dynamic content from CSV
Create and manage thousands of dynamic content versions directly from a CSV file.
Learn more >>



The Dynamic Keyword Insertion (DKI) option allows you to display values using shortcodes:
* The user’s location: country, state, city, or continent
* A value of a query string parameter
* The user name
* An event time – calculated according to the user time zone

And more… for all DKI shortcodes >>

Examples for Dynamic Keyword Insertion shortcodes:

User’s Country
Display the user’s location: country, city, state, continent, or time zone.

[ifsoDKI type='geo' show='country']

More Geolocation DKI shortcode options >>

Query String DKI
Display the value of any query string.

[ifsoDKI type="querystring" parameter="YOUR-PARAMETER" fallback="Your default value (optional)"]

More Geolocation DKI shortcode options >>

Auto-Local Time Display
Show an event time calculated according to the user’s time zone.

[ifsoDKI type='time' show='user-geo-timezone-sensitive' time='04/25/2022 08:00' format='n/j/o, G:i']

More Geolocation DKI shortcode options >>


  • Dynamic triggers - works with all page builder users
  • Dynamic Gutenberg Blocks
  • Dynamic Elementor Elements
  • The conditions
  • Built-in stats
  • Dynamic Keyword Insertion (DKI) shortcodes
  • Compatible with caching plugins
  • User segmentation
  • User-self selection field
  • The recurrence option
  • Dynamic trigger


This plugin provides 1 block.

  • Dynamic Content


  1. Go to your WordPress Control Panel
  2. Click “Plugins”, then “Add New”
  3. Enter “ifso” as a search term and click “Search Plugins”
  4. Download and install the IfSo Dynamic Content plugin
  5. Click the “Activate Plugin” link
  6. On your WordPress menu under IfSo, click “Add new”
  7. Fill in the default content
  8. Select rule
  9. Choose the content you wish to display if the rule is met and press “Publish”


Does If-So work with any page builder?

Yes, If-So works on every website, regardless of the page builder you are using.

Is there a session limit

No, the only condition that is limited by sessions is the Geolocation condition since we use a highly accurate, premium, IP-to-location database.

What content can be customized with If-So?

If-So allows you to customize any element on the website, including titles, texts, images, videos, menu items, and design.

How does If-So work?

If-So is very simple to use. All you have to do is select a condition (rule), set the content you would like to display if it is met, and set default content to be displayed when it is not.

*All page builder users: *

  1. Create a trigger
  2. Select a condition and set the personalized content version
  3. Optional – create more dynamic versions and set the default content
  4. Paste the shortcode wherever you want to display the content
    Every time a page with the shortcode is loaded, one of the content versions will be displayed accordingly.

Learn more >>

Gutenberg and Elementor users

  1. Select the block or element
  2. On the side menu, select the condition to display the block/element

– More about conditional Elementor Elements >>
– More about conditional Gutenberg Blocls >>

Which conditions (rules) can I set with If-So?

You can choose from a variety of conditions. Here are a few examples:

  • Referral source – Show different content to users arriving through a specific domain or webpage.
  • In-site remarketing – Show different content to users who referred from a particular page on your website.
  • Logged-in users – Show different content to logged-in users.
  • New and returning visitors – Show different content to returning / new visitors.
  • Browser language – Show customized messages to visitors according to their set browser language.
  • Dynamic Link- Create a dynamic website URL: send it to users or use it in Google Adwords, Facebook, and other advertising platforms. Visitors who arrive through the dynamic link will see unique content.
  • Schedule – Change selected parts of your website content according to the time and day.
  • Start and end date – Show content throughout selected dates.
  • UTM Parameters-based content – Add or replace content based on UTM (tracking parameters).

click here for the complete list of conditions

Can I use If-So WP Plugin with any WordPress theme?

You sure can! So far, we have not come across any WordPress themes that If-So Dynamic Content can not work with. If for any reason it doesn’t work with your theme, we will work with you to resolve the issue.


February 2, 2024
Just an awesome and unique plugin. I wish that every project I did had twice the time and budget just to focus on content customisation.
December 13, 2023 2 replies
I've been on the hunt for this specific kind of plugin, and I'm thrilled to announce that I've finally discovered it. This plugin is quite rare, guys. It's incredibly difficult to come across.
July 17, 2023 1 reply
I have displayed different tabs based on different locations but when i see it in other locations those tabs design is breaking. in India location they are coming fine. in other locations tabs design breaks
July 16, 2023 2 replies
I had to uninstall this due to it breaking my website. I am running Wordpress 6.2.2 and elementor 3.15.0-dev 2 along with elementor pro v3.14.1. I will change this review if it can be fixed.
Read all 77 reviews

Contributors & Developers

“If-So Dynamic Content Personalization” is open source software. The following people have contributed to this plugin.


“If-So Dynamic Content Personalization” has been translated into 1 locale. Thank you to the translators for their contributions.

Translate “If-So Dynamic Content Personalization” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • Added GA4 reporting option, which can be activated per-shortcode by adding a ga4=”yes” attribute to the trigger’s shortcode.
  • Allowed names to be added to If-So trigger versions, which are also included in the GA4 events being sent (if enabled) as event parameters.
  • Reworked the Gutenberg standalone condition widget for improved reliability and performance.
  • Added a new public JS event – “ifsoajaxcontentloaded” – to help synchronize all the actions attached to various ajax content loading procedures.
  • Allowed triggers rendered by “recurrence” and “testing mode” to work with analytics, groups, and other hooks.
  • Allowed setting the_content filter on a trigger rendered via ajax (previously only without ajax) by setting the “the_content” attribute in the shortcode.
  • UI improvements.
  • Bug fixes.

  • Security update.


  • New functionality – Redirect shortcode improvements: Create a URL template to easily redirect each page on your site to a corresponding page on another domain, subdomain, TLD, or directory. Learn more.


  • New functionality – Conversion can now be set to fire once every X seconds via the “do_once_per” shortcode attribute. Learn more.
  • PHP 8.2 compatibility – Prevent the use of deprecated functionality.
  • “Find a Trigger” tool functionality improvements.
  • Elementor compatibility improvements – Treat Elementor “preview” pages like edit pages.
  • Reworked the built-in analytics conversion system.
  • Reworked the trigger hook/filter mechanism.
  • Redirect shortcode – Escape URL before placing it on the page; changed “once_per” attribute to “do_onceper”.
  • ifsoDKI shortcode in “ajax” mode now works inside various pop-ups (If-So trigger events, Elementor, and others).
  • Conditional Gutenberg Blocks functionality – Fixed dependency bug occurring in the newest version of WordPress.
  • If-So triggers’ shortcodes inside If-So bulks content now use the appropriate context when loaded via Ajax and vice versa.
  • Gravity Forms compatibility fixes.
  • Various bug fixes.

  • WordPress 6.4 compatibility fixes


  • Add support to use the HTML5 Geolocation API (browser location) option, provided by the free Geolocation Extension. Learn more
  • [ifso-add-cookie] Shortcode: Added ‘increment’ attribute. Setting it to ‘yes’ will make the cookie value a number that increments each time the shortcode is encountered. Learn more.
  • Cookie Condition: Added “Numeric is more than” / “Numeric is less than” options.
  • Redirect Shortcode: Added the ability to redirect once per a specified period of time. Learn more.
  • “Find Shortcode” / Scan Posts Tool: Functionality improvements, including the ability to scan for relevant if-so conversions.
  • Audiences and Geolocation Dashboard Pages: Enhancements.
  • Bug Fixes.


  • State targeting now utilizes the Google Maps API for state selection.
  • Compatibility with new functions of the If-So Geolocation extension has been enhanced.
  • Added the option to “block bots” (can be activated in the settings) (learn more).
  • The geolocation request log and analyzer tool now include user-agent data, making it easier to detect and block bots. User agents can be blocked by passing an array of user-agent values to the filter “ifso_block_bots_extra_blocked_user_agents” (User-agent will be blocked if its text contains the value)
  • Flag DKI Shortcode: Added a “classname” attribute, allowing users to add classes to the rendered element.
    Ex. [ifsoDKI type=’geo’ show=’flag’ width=’50px’ classname=’class-you-choose’]
  • Location override improvements: Added the option to display flags near the country labels in a selection form.
  • Location override improvements: Country DKI shortcode is now affected by the override functionality.
  • Location override page caching compatibility: The form can now be loaded using Ajax.
  • Added the ability to whitelist users from the geolocation “Block bots” mode based on IP, cookie, or by using the geo service in the same way blacklisting is done, but with the “ifso_geo_whitelist” filter instead.
  • Allow blocking users from the geolocation service based on the results of custom functions (user role, login status).
  • UI improvements.
  • Bug fixes.

* Added the option to become a geolocation reseller – create sublicenses for clients’ websites and take control of allocating monthly sessions to each sublicense based on their needs. Learn more..
* Improved the user interface of the geolocation dashboard section.
* Extended access to the audiences page and audience creation/deletion to editors, authors, and other custom roles with post creation permissions.
* Bug fixes.

* Geolocation page – Various UI and style changes; added session usage chart to info tab
* Added new filter – “ifso_visit_count_expiration” – letting the user set the expiration of the “returning visitor” cookie
* Enabled if-so conversion shortcodes to work when loaded via ajax
* Bug fixes

= 1.6.1=
* Compatiblity with the new If-So Geolocation Extension.
* Log geo requests functionality removed – moved to geo extension. Note! If you enabled the log in the past, the old log will be deleted, you will have to download the If-So Geolocation Extension and re-check the ‘Log Geolocation Request’ in the plugin’s settings to create a new log.
* Conditional Gutenberg blocks – streamlined the process of targeting locations for the Geolocation condition.
* Added ability to display the audiences a user is assigned to using the shortcode[ifso-audience type=’show’ show=’user-audiences’]
* Geolocation page UI changes.
* UI changes – the geolocation license activation field was moved to the license page.

= 1.6.0=
* New system to sync extensions and integrations.
* Compatiblity improvements with new version of the conditional countdown extension
* [ifso-show-post] shortcode – added type=’elementor’ to improve rendering of elementor templates.
* Geolocation condition – “Curacao” was added to the list of countries
* UTM condition – added “term” type to the conditional Gutenberg and Elementor conditions.
* Bug fixes

= 1.5.9=
* Gutenberg and Elementor widgets – an autocomplete option was added to the geolocation condition to ease the targeting of cities and states.
* Post category condition – UI changes
* AB Testing condition – added the option to create split testing with 5 versions.
* Query-string DKI – added a hook to allow users to set the expiration of the “persist” cookie.
* Settings – an option to apply shortcodes to navigation menus was added.
* Performance improvements
* Bug fixes

= 1.5.8=
* Compatibility with various cookie consent plugins and systems was added: Cookiebot, Cookie Notice & Compliance for GDPR / CCPA(hu-compliance), Complianz.
* [ifso-show-post] shortcode – Improved the shortcode while using WPBakery and Divi posts(templates). Adding the attributes type=”WPB” or type=”divi” to make sure the post content loads correctly.
* WP filters for content resulting from rendering triggers/widgets were added: apply_filters( ‘ifso_standalone_condition_content’, string $content ), apply_filters(‘ifso_shortcode_content’,string $content, array $atts).
* [ifso-audience] shortcode – added ability to add/remove users from audiences based on query strings, either by using a URL param value as audience name or a condition to determine whether the user should be added/removed:
[ifso-audience type=’add’ from=’query’ param=’myparam’] – will add the user to the group, whose name is the value of the “myparam” querystring parameter. default value for param is “ifso_audience”.
[ifso-audience type=’remove’ from=’query-condition’ param=’myparam’ param_value=’my-remove-parameter’ audience=’group1′] – will only remove the user from group “group1” if the “myparam” query string value equals “my-remove-parameter”.
* [ifsoDKI] shortcode – added “before” and “after” attrs that allow injecting text around the content while dynamic content is displayed(not fallback).
* [ifsoDKI] shortcode – added “persist” attr for query-string DKI – to show content when the user browses other pages, even if the query string is not present anymore(during tone session).
* Edit Trigger page – UI improvements.
* SEO plugins compatibility – Allow using If-So shortcodes in the title and meta desc fields of YOAST and Rank Math.
* New feature – find (scan for) If-So shortcodes on posts and pages’ main content field
* Added ability to exclude specific users from geolocation based on cookie or their IP, using a new wp filter:
apply_filters(‘ifso_exclude_from_geo’,array $excluded) $excluded array format : [‘cookie’=>[‘exclude_from_geo’],’ip’=>[]]
* New condition – post category (works also on custom taxonomies and terms)
* Elementor trigger element – added “Load with ajax” option
* If-So content loaded via ajax – improve compatibility with page builder content by making sure the js code within it runs in the global scope
* Bug fixes and performance improvements

* Dynamic Keyword Insertion – an option to load the shortcodes with Ajax was added (add the parameter ajax=”yes” to the shortcode)
* Trigger Events extension compatibility – support the option to load triggers above the header on all pages (through the plugin’s settings)
* Bug fixes

* Bug fixes – Elementor triggers widget not displaying content in some cases


  • Conditional Gutenberg blocks – added the option to target multiple locations/pages visited in a single condition
  • Conditional Elementor elements (integration)- added compatibility to support the option to target multiple locations/pages visited in a single condition
  • Added the option to log geolocation requests for debugging
  • New Ajax …