=== If-So Dynamic Content Personalization===
Contributors: ifso
Donate link: https://www.if-so.com/?utm_source=WordPress&utm_medium=Readme&utm_campaign=Donate%20link
Tags: Dynamic content, personalization, conditional, geolocatargeting, location
Requires at least: 4.0.1
Tested up to: 6.9
Stable tag: 1.9.6
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

Personalize any content! Add or replace content according to the visitor's profile and interaction with the site. No coding required!

== Description ==

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

No coding required!

== FOUR WAYS TO CREATE DYNAMIC CONTENT ==

* Conditional triggers - works with every page builder - <a href="https://www.if-so.com/help/documentation/how-to-create-dynamic-content-trigger/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=dynamic-triggerTop">Watch</a>
* Conditional Gutenberg blocks - <a href="https://www.if-so.com/conditional-gutenberg-blocks/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=gutenbergTop" target="_blank">Watch</a>
* Conditional Elementor elements - <a href="https://www.if-so.com/elementor-personalization" target="_blank">Watch</a>
* Dynamic Keyword Insertion (DKI) shortcodes - <a href="https://www.if-so.com/help/documentation/dynamic-keyword-insertion/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=DKITop" target="_blank">Watch</a>


Watch a short video (1:36):

[youtube https://www.youtube.com/watch?v=yRroTk7EDF8?rel=0]


== WHY IF-SO? ==

* 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

.....................................................................

== HOW IT WORKS ==

= 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.

<a href="https://www.if-so.com/help/documentation/how-to-create-dynamic-content-trigger/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=dynamic-trigger" target="_blank">Learn more >></a>

= Gutenberg and Elementor users =

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

<a href="https://www.if-so.com/elementor-personalization/" target="_blank"> - More about conditional  Elementor Elements >></a>
<a href="https://www.if-so.com/conditional-gutenberg-blocks/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=gutenberg" target="_blank"> - More about conditional  Gutenberg Blocks >></a>


.....................................................................

        
== WHICH CONDITIONS CAN BE SET WITH IF-SO? ==


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

**Most popular**

1. Geolocation - Show location-based content (<a href="https://www.if-so.com/location-based-content-wordpress-plugin/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=geolocation" target="_blank">examples >></a>)
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 (<a href="https://www.if-so.com/google-ads/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=google-ads" target="_blank">examples >></a>)
3. UTM Parameters - Show dynamic content based on UTM parameters or other query strings (<a href="https://www.if-so.com/help/documentation/utms/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=utm-parameters" target="_blank">examples >></a>)
 
<a href="https://www.if-so.com/personalization-examples?utm_source=WordPress&utm_medium=Readme&utm_campaign=1.5.1&utm_term=examples" target="_blank">More usage examples >></a>

**Geolocation**

* 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)

**WooCommerce**

* 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


<a href="https://www.if-so.com?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=AboutTheConditions" target="_blank">**All conditions >>**</a>

.....................................................................

== 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.

.....................................................................

== THE EXTRA OPTIONS THAT MADE If-So THE #1 PERSONALIZATION PLUGIN ==

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.
<a href="https://www.if-so.com/help/documentation/segments/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=audiences" target="_blank">Learn more >></a>

**User self-selection form:**
Allow users to select the content they will see by assigning themselves to an audience (segment).
<a href="https://www.if-so.com/dynamic-select-form/" target="_blank">Learn more >></a>

**Conditional pop-ups**
Create pop-ups that will be displayed based on any If-So condition.
<a href="https://www.if-so.com/conditional-pop-ups/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=pop-ups" target="_blank">Learn more >></a>

**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.
<a href="https://www.if-so.com/custom-user-profile-fields-dynamic-content/" target="_blank">Learn more >></a>

**Dynamic content from CSV**
Create and manage thousands of dynamic content versions directly from a CSV file.
<a href="https://www.if-so.com/dynamic-content-from-csv/" target="_blank">Learn more >></a>

.....................................................................

== DYNAMIC KEYWORD INSERTION (DKI) ==

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

<a href="https://www.if-so.com/help/documentation/dynamic-keyword-insertion?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=AllDKI" target="_blank">And more… for all DKI shortcodes >></a>

= 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']
`
<a href="https://www.if-so.com/geolocation-dki/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=geo-dki" target="_blank">More Geolocation DKI shortcode options >></a>


**Query String DKI**
Display the value of any query string.
`
[ifsoDKI type="querystring" parameter="YOUR-PARAMETER" fallback="Your default value (optional)"]
`
<a href="https://www.if-so.com/query-string-dki-shortcode/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=qs-dki" target="_blank">More Geolocation DKI shortcode options >></a>


**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']
`

<a href="https://www.if-so.com/auto-local-time-display/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=local-time-display-dki" target="_blank">More Geolocation DKI shortcode options >></a>





== Installation ==

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


== Frequently Asked Questions ==

= 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.

<a href="https://www.if-so.com/help/documentation/how-to-create-dynamic-content-trigger/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=dynamic-trigger" target="_blank">Learn more >></a>

*Gutenberg and Elementor users*

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

<a href="https://www.if-so.com/elementor-personalization/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=elementor" target="_blank"> - More about conditional  Elementor Elements >></a>
<a href="https://www.if-so.com/conditional-gutenberg-blocks/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=gutenberg" target="_blank"> - More about conditional  Gutenberg Blocls >></a>
 
= 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).

<a href="https://www.if-so.com?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=faq-list-of-conditions" target="_blank">**click here for the complete list of conditions**</a>

= 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.


== Screenshots ==
1. Dynamic triggers - works with all page builder users
2. Dynamic Gutenberg Blocks
3. Dynamic Elementor Elements
4. The conditions
5. Built-in stats
6. Dynamic Keyword Insertion (DKI) shortcodes
7. Compatible with caching plugins
8. User segmentation
9. User-self selection field
10. The recurrence option
11. Dynamic trigger 

[ifso-audience type="add" audience="Male"]


== Changelog ==

= 1.9.7 =
* Added a new shortcode - [ifso_hide_site_content] which allows you to display a message instead of the site's content.
* If-So GA4 Extension compatibility.
* UI improvements.
* Bug fixes and PHP 8.4 compatibility improvemnts.


= 1.9.6 =
* Added a new ifso_cookie_category filter that allows you to change the cookie consent category of cookies added by If-So. The filter receives two arguments: the cookie type (necessary, statistics, marketing, preferences) and the cookie name (<a href="https://www.if-so.com/faq-items/can-i-change-the-category-of-if-so-cookies/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=cookiefilter" target="_blank">Learn more</a>).

* Added a new DKI shortcode that lets you block users from accessing the site based on If-So conditions (for example, country-based blocking; <a href="https://www.if-so.com/geolocation-wordpress-plugin/wordpress-country-block/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=cookiefilter" target="_blank">Learn more</a>).

= 1.9.5.1 =

* Bug fixes (Built-in analytics UI)

= 1.9.5 =

* User IP condition - added a “starts with” operator
* Conditional Elementor and Gutenberg blocks - added Date & Time conditions
* Date & Time condition - can now operate using either the server timezone or the user’s local timezone (via geolocation)
* UI improvements on the trigger page
* [ifso-redirect] and [ifsoDKI type='url'] shortcodes - URL template now supports the {{?}} character, which renders a “?” when a query string exists and an empty string when it doesn’t
* Bug fixes and performance optimizations


= 1.9.4.1 =

* Resolved a non-critical security concern.

= 1.9.4 =

* New visual tool for generating If-So DKI and Utility shortcodes
* Shortcode improvements – [ifso-redirect] shortcode generator
* Reworked the A/B Testing condition for improved usability
* If-So Trigger Gutenberg block: added “Load with AJAX” option
* UI improvements
* Performance improvements
* Bug fixes

= 1.9.3.2 =

* Security fixes

= 1.9.3.1 =

* Google Places API compatibility fixes

= 1.9.3 =

* Compatibility with the <a href="https://wordpress.org/plugins/if-so-conditional-elementor-elements/" target="_blank">If-So & Elementor integration (version 1.4)</a>
* UI and microcopy improvements
* Bug fixes

= 1.9.2.2 =

* Compatibility with the upcoming If-So & Elementor integration (version 1.4)
* Fixed information disclosure vulnerability in the [ifso-show-post] shortcode
* UI and microcopy improvements
* Bug fixes


= 1.9.1 =

* Audience Standalone Condition – Added an option to target users who are either inside or outside any audience
* Updated the "Mobile Detect" library (the new version requires PHP 7.4 or higher)
* Bug Fixes



= 1.9 =

* PHP 5.X and lower versions are no longer supported.
* An old format of the DKI shortcodes has been removed. The new version no longer supports the following shortcodes (all of them have new alternatives):
[ifso_display_user_geo], [ifso_display_user_languages], [ifso_display_referrer]
* The [ifso-redirect] shortcode now defaults to the JS redirect type when rendered within an If-So trigger loaded via AJAX.
* A new filter, "ifso_gutenberg_standalone_widget_forbidden_blocks," has been introduced to prevent the If-So standalone condition widget from loading on certain Gutenberg blocks.
* Geo-session usage notifications are now calculated based on all licenses installed on the site, rather than separating pro and geolocation licenses.
* The "shortcodes in titles and menus" setting now affects WooCommerce page/category titles and breadcrumbs.
* The "time" DKI shortcode (Also known as the Auto-local Time Disaply shortcode) now supports displaying the current time according to the website's timezone using the format attribute (optional), for example: [ifsoDKI type='time' show='site-timezone' format='n/j/o, G:i'].
* Bug fixes
* Refactoring
* Performance improvments



= 1.8.0.4 =

* Licensing system improvements
* Bugs fix


= 1.8.0.3 =

* New DKI Shortcode: Automatically Creates Link Templates Based on the Page URLs. Commonly used to create a link to a parallel page on a different website.[ifsoDKI type='url' url='{{SCHEME}}://{{HOST}}{{PATH}}?{{QUERY}}']
* Security fix (XSS vulnerability)


= 1.8.0.2 =

* Bug fixes (Uncaught TypeError)

= 1.8.0.1 =

* Bug fixes (conditional gutenberg blocks)


= 1.8 =

* 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.

 

= 1.7.1.1 =
 
* Security update.


= 1.7.1 =
 
* 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. <a href="https://www.if-so.com/help/documentation/redirect-users-based-on-conditions/" target="_blank">Learn more</a>.



= 1.7 =
 
* New functionality - Conversion can now be set to fire once every X seconds via the "do_once_per" shortcode attribute. <a href="https://www.if-so.com/help/documentation/analytics/" target="_blank">Learn more</a>.
* 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.

= 1.6.3.1 =


* WordPress 6.4 compatibility fixes



= 1.6.3 =


* Add support to use the <a href="https://wordpress.org/plugins/if-so-geolocation/" target="_blank">HTML5 Geolocation API (browser location) option</a>, provided by the free Geolocation Extension. <a href="https://www.if-so.com/the-html-geolocation-api/?utm_source=WordPress&utm_medium=Readme&utm_campaign=v2&utm_term=html5_api" target="_blank">Learn more</a>
* [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. <a href="https://www.if-so.com/help/documentation/the-cookie-condition/" target="_blank">Learn more</a>.
* 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. <a href="https://www.if-so.com/help/documentation/redirect-users-based-on-conditions/" target="_blank">Learn more</a>.
* "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.





= 1.6.2 =
* 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.



= 1.6.1.2=
* 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. <a href="https://www.if-so.com/add-ons-and-integrations/sub-geolocation-license/" target="_blank">Learn more.</a>.
* 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.


= 1.6.1.1=
* 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 <a href="https://wordpress.org/plugins/if-so-geolocation/" target="_blank">If-So Geolocation Extension</a>.
* 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 <a href="https://wordpress.org/plugins/if-so-geolocation/" target="_blank">If-So Geolocation Extension</a> 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 <a href="https://www.if-so.com/add-ons-and-integrations/" target="_blank">extensions and integrations</a>.
* 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





= 1.5.7.2=
* 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  


= 1.5.7.1=
* Bug fixes - Elementor triggers widget not displaying content in some cases 

= 1.5.7 =
* 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 loader animation - show the default content until the dynamic version loads using Ajax
* Global ifso() function now allows 2 additional parameters, making its signature ifso($id,$atts=null,$return=false), where $atts is an array of attributes that can be passed to the if-so shortcode and $return is a boolean, which determines whether the function echoes or returns the result of the trigger
* Added ability to load if-so shortcodes with "name" parameter instead of "id"(uses trigger title) - THE OPTION HEARTS LOADING TIMES - USE THE TRIGGER ID UNLESS YOU HAVE A REASON NOT TO
* New DKI shortcode option, to display the user's IP : [ifsoDKI type='ip']
* UI improvements
* Geolocation service now supports IPV6 addresses
* Added filter to allow users to set alternative IP detection - "ifso_user_ip"
* Bug fixes


= 1.5.6.2 =
* Bug fixes


= 1.5.6.1 =
* Updated jquery-ui version in admin ui to 1.13.1
* Fix geolocation caching in triggers loaded via ajax
* Added option to cache the geolocation data in cookies(as opposed to sessions)
* Bug fixes



= 1.5.6 =
* New condition - Session Variable: create conditional content based on a session variable. The option was added to the cookie condition.
* Compatibility with our <a href="https://www.if-so.com/elementor-personalization/">Conditional Elementor Elements integration</a>
* Ajax loading - an option to load conditional Gutenberg Blocks using Ajax 
* Ajax loading - an option to load conditional Elementor elements using Ajax
* Redirect shortcode: Create 301/302 or JS redirects using a shortcode. Insert the shortcode in the the dynamic version content field to create conditional redirects <a href="https://www.if-so.com/help/documentation/redirect-users-based-on-conditions/">Learn more</>
* Bugfix: Use WordPress timezone for determining current day in schedule condition (problems occurred on specific scenarios)
* Visit count is now performed only through an ajax request
* Improved IP detection for geolocation functionality
* Gutenberg standalone condition widget - changed the "If-So Active" indicator to be a colored border, to avoid breaking the appearance of some blocks in the editor
* Security improvements
* Bug fixes



= 1.5.5.1 =
* Added shortcode that sets/deletes a cookie value <a href="https://www.if-so.com/add-and-remove-cookies-using-shortcodes/" target="_blank">Learn more.</a>
* Cloudflare Compatibility - The geolocation condition works with Cloudflare without having to use our Cloudflare integration
* Divi modules compatibility improvements while loading content with Ajax
* Page Caching Compatibility improvements - the referrer source condition is compatible with the Page Caching Compatibility (ajax) option
* Gutenberg standalone conditions - fix conflict with jetpack contact form
* Gutenberg standalone conditions - fix bug where the block inserter wasn't appearing when hovering between blocks
* Bugfix - Removed calls to dysfunctional updater -  fixed bug which  caused an  "update  available" message  to  be shown
* Bugfix - Audiences - fixed the handling of names with "special characters"



= 1.5.5 =
* The recurrence option was added to the user role condition
* An option to disable the use of sessions was added to the settings (do not disable the sessions if you are using the geolocation condition)
* Audience self-selection shortcode generator was added the audience page
* added  the ability to defer the loading of  if-so triggers   via  ajax  (by adding the parameter defer="true" to the trigger's shortcode)
* Added new option to disable the number of visit count cookie to the settings
* Bugsfix - import triggers  - fixed  newlines being replaced  with "rn"
* bugsfix - TinyMCE ediotr was reverted to HTML mode while dragging a version
* (1) Security fix (Ajax vulnerability)




=1.5.4.2 =
* Bugfix - TinyMCE is no longer turning image URLs to be relative urls when changing versions order
* TinyMCE - An option to prevent text nodes from being wrapped in <p> tags was added to the settings
* Yoast SEO - Prevent if-so triggers (the "view trigger" pages) from being added to the sitemap
* <a href="https://www.if-so.com/custom-user-profile-fields-dynamic-content/" target="_blank">Custom user profile extension</a> - a new option to assign a value using a query string
* <a href="https://www.if-so.com/dynamic-content-from-csv/" target="_blank">CSV extension</a> - New conditions - Cookie ; geolocation ; IP
* WordPress 5.8 compatiblity

user details trigger - fix admin display bug

= 1.5.4.1 =
* New condition - Referral Category: Display dynamic content based on the referral page/post category (page or post on your site).
* New condition - Trigger visited: Show dynamic content if a specific trigger was previously displayed to the user.
* Ajax loading: an option to show a loader animation while the content is being loaded in Ajax mode (Page Caching Compatibility mode) .
* The Geolocation Condition: An option to target a city manually (without autocomplete) - this option should be used to overcome problems with targeting cities whose names in Google Maps (the backend autocomplete service we use) are spelled differently from our IP-to-location database)
* The Schedule Condition - More flexibility setting the times. You can now change the time intervals through the plugin's settings.
* The Page URL Condition - An option to ignore case was added.
* The User Role Condition - The option to set the recurrence option was added to the condition.  
* New DKI shortcode - "Auto-Local Time Display":- Show an event time calculated according to the visitor's time zone.
* Audiences - You can now add or remove users from an audience using a shortcode.
* Bugfix - HTML mode was turning to visual mode while dragging a version.  
* Performance - An option to disable the use of sessions was added to the settings (do not disable the sessions if you are using the geolocation condition).  
* Extensions and integrations -The new version supports some of our <a href="https://www.if-so.com/add-ons-and-integrations/" target="_blank">latest extensions and integrations.</a>
*Various bug fixes and performance improvements


= 1.5.3.2 =
* Hotfix- security vulnerability fixes

= 1.5.3.1 =
* WordPress 5.6 compatibility fixes


= 1.5.2.4 =
* WordPress 5.6 compatibility fixes

= 1.5.2.2 =
* Hot fix - Elementor compatibility - fail to load the Edit With Elementor screen using WordPress 5.6

= 1.5.2.1 =
* Bug fix - loading speed

= 1.5.2 =
* Display post content using a shortcode - create content using your page builder as a post. Use the shortcode [ifso-show-post id="###" show="content/title"] inside an If-So version to display the post content.
* Content editor - Allowing inline JavaScript and SVG usage inside the trigger's wysiwyg editor
* Bugfix - adding conditions to 3rd-party Gutenberg blocks 

= 1.5.1 =
* Gutenberg - option to set conditions directly in a block
* Preventing no-cache headers from being sent as a result of If-So using PHP sessions
* Shortcodes are now rendered when entered in YOAST and SEO Pack title meta filed.
* New routine for detecting a user’s IP
* Added WPDB prefix to the beginning of names in the tables used by If-So
* Bugfix - The option to prevent Ajax calls was fixed.


= 1.5.0.1 =
* Ajax loading (page caching compatibility) - Load triggers after ther page loads from the cache. 
* DKI - A new option to set the default content in the User name DKI shortcode.
* Bugfix - Subscribers data is now collected by Built-in analytics.
* Groups - The name was changed to "Audiences"
* New DKI - name of the day.
* Bugfix - The option to prevent Ajax calls was fixed.


= 1.4.9.1 =
* Bug fix - Geolocation - targeting city-states (Singapore, Monaco, etc.)
* Bug fix - CSS and JS conflicts with 3rd party plugins.


= 1.4.9 =
* New Elementor Widget 
* Geolocation DKI - An option to set a fallback was added
* Bugs fix (visual editor issues)

= 1.4.8 =
* New DKI shortcode - display a value of a query string paremeter 
* Improved the help box and help notifications
* Bugs fix (visual editor issues)

= 1.4.7 =
* Geolocation dashboard improvements
* Change the Time and date conditions to rely on local time.
* Stop including admin views in the built-in analytics
* Load time improvements
* RTL fixes
* Bugs fix (remove groups data on uninstall; Google places javascript issue;)

= 1.4.6.1 =
* WordPress 5.4 compatibility fixes (Gutenberg design)
* Bugs fix (Conflict with SafeGard)

= 1.4.6 =
* New feature: Create groups; Add users to a group when the condition is met; Display group-based content.
* New condition - user role. Add or replace content according to the user’s role (Administrator, Editor, Subscriber, or any other role you have on your website)
* New feature - User’s Select - Let the users select the content they'll see. Add a select box or radio buttons with categories and show category-based content
* Bugs fix


= 1.4.5 =
* If used in the page title, If-So’s shortcodes are now also rendered in the meta title of the page.
* Allowing Editors to create and edit triggers
* Gutenberg block - an indication showing if a trigger was deleted was added
* Geolocation  - The user’s location will be checked again if the user’s IP has been changed - even if the session hasn’t been ended.
* Bugs fix



= 1.4.4 =
* Gutenberg block
* New condition: Content by cookie name and cookie value
* Performance improvements.
* Bugfixs.
* Security updates.

= 1.4.3 =

* Built-in analytics was added - see how many time each version was displayed what effect does it have on the conversion rate.
* UI improvements.
* Security updates.
* Bug fixes.

= 1.4.2 =

* An option to import and export triggers was added.
* A new button that allows editing and embedding triggers was added to the content editor.
* Import and export triggers.
* Security updates.
* Refactored + Bug fixes.



= 1.4.1 =

* New condition - Cookie Detection: - Show dynamic content based on existing cookies on the user's browser.
* The License Key is now hidden
* An option to allow shortcodes in the titles was add to the settings
* Duplicate triggers option was added to the `All the triggers page`
* An option to disable the `pages visited` cookie was added to the settings
* A new option to overrdie recurrence was added to conditions with recurrence
* Dynamic keyword Insertion is now an integral part of the plugin
* Refactored + Bug fixes.

= 1.4.0 =

* New condition - Cookie Detection: Add or replace content according to UTM parameters
* New condition - IP Detection: - Show dynamic content based on user IP.
* Refactored + Bug fixes.



= 1.3.3 =

* Improved user experience at the advertising platforms condition (Google Ads, Facebook Ads and dynamic link)
* Right to left support
* A Russian translation was added
* Refactored + Bugs fix

= 1.3.2 =

* Drag versions to change their order
* Settings - An option to prevent WordPress from wrapping If-So shortcodes with <p> tags was added.
* Settings - An option to choose not to remove If-So's data when the plugin is deleted was added.
* Settings - An option to set The duration used by the 'pages visited' condition to track users’ visits was added.
* Number of versions - There is now no limit to the number of versions that can be created.
* A/B testing - An option to set a control group (will be displayed 100% of the reminder sessions) was added 
* Refactored + Bugs fix

= 1.3.1 =

* New condition - Pages visited: Show dynamic content to visitors who have been visited a chosen page (or pages) on your website
* Refactored + Bugs fix

= 1.3.0 =

* New condition - Page URL: Show dynamic content if the page URL is or consists a certain text string
* Refactored + Bugs fix


= 1.2.9 =

* Thrive architect compatibility
* New geolocation options: target visitors by continent, state, and time zone.
* New feature for the browser language condition - choose to display custom content only when the user's language is set as the primary language (The option to target users when a language is not set as default is still available).
* Reach snippets compatibility

PLEASE NOTE - THE REFERRER SOURCE CONDITION IS NO LONGER  AVAILABLE FOR FREE. IF YOU ARE USING  A VERSION OLDER THAN 1.2.9, AND WOULD LIKE TO KEEP USING THE REFERRER SOURCE CONDITION, PLEASE CONTACT US.


= 1.2.8 =

* Recurrence - New options were added
* Geolocation - New settings screen shows utilization details
* Browser language - Dynamic version will be presented even if the user's browser language is not set as the main language in his browser settings.
* Refactored + Fixed bugs


= 1.2.7 =
* Recurrence (New feature) - After the condition is met for the first time, the version will be displayed any time the visitor encounters the trigger. Recurrence works only if the visitor entered again from the same device and browser and did not delete cookies.

= 1.2.6 =
* New condition - Geolocation: Add or replace content according to the user's location - country or city

= 1.2.5 =
* Some conditions are now open to registered users only. Please note that if you already use the plugin only default content will be displayed unless you register (Free for one year).
* The free conditions are: Logged-in users, device type, and referrer source.

= 1.1.6 =
* New conditions were added: Start & end date.
* New conditions were added: Scheduling Content.
* Pause mode - Users can now temporarily pause a version of the content.

= 1.1.4 =
* New condition added- Browser language
* Testing mode - Force displaying of a chosen version of content.

= 1.1.3 =
* New condition added- New / Returning visitors


== Upgrade Notice ==

