=== PersonalizeWP ===
Contributors: filterdigital, paulfhalfpenny, davecpage, tommc1985filter, markmanders20, personalizewp
Tags: personalize, dynamic content, display conditions, conversion, segment
Requires at least: 6.2.0
Tested up to: 6.9
Stable tag: 3.5.3
Requires PHP: 7.4
License: GPL v3
License URI: https://www.gnu.org/licenses/gpl-3.0.html

Add powerful personalization features to your WordPress site. Show different content to visitors based on their behavior, profile, location, and more.

== Description ==

PersonalizeWP is the most comprehensive personalization plugin for WordPress, giving you everything you need to create unique experiences for every visitor to your site.

Built by [Filter](https://filter.agency), an award-winning WordPress agency, PersonalizeWP brings enterprise-level personalization capabilities to WordPress sites of all sizes. The plugin is battle-tested on high-traffic sites and designed to work perfectly with cached environments.

With PersonalizeWP, you can show or hide any block in the WordPress editor based on visitor characteristics, build detailed visitor profiles, create content variations, segment your audience, and track engagement through lead scoring - all without writing a single line of code.


=== Complete Personalisation Toolkit ===

PersonalizeWP includes everything you need to personalize your WordPress site:

**Display Conditions** Control exactly who sees your content with rules based on device type, location, time, user behavior, and dozens of other conditions. Combine multiple rules with AND/OR logic for precise targeting.

**Visitor Profiles** Automatically build comprehensive profiles for each visitor, tracking their journey through your site, pages visited, forms completed, and engagement levels.

**Custom Profile Fields** Capture and store specific visitor information through forms and interactions, then use this data to trigger personalized content throughout your site.

**Content Variations** Create multiple versions of any content block and automatically show the right version to each visitor based on their profile or behavior.

**Segments** Group visitors with similar characteristics or behaviors into segments for scalable personalization across your entire site.

**Lead Scoring** Automatically assign scores to visitor actions to identify your most engaged prospects and trigger appropriate content or offers.

**REST API** Access visitor data programmatically with our REST API endpoints. Build custom features like recently viewed products, personalized recommendations, or dynamic content based on visitor activities and segments.

**Custom Events API** Build custom tracking JS to monitor things like video engagement, interactions with quizzes or calculators, or any conversion unique to your business.

**Data Export** Export your visitor event data with our comprehensive Data Export feature.

**Product Collection** Block Display personalized product recommendations with our WooCommerce Product Collection block. Show "Previously Viewed Products" or "Products For You" without any manual configuration.

**Access Controls** Restrict content to specific users or groups with password protection, user role restrictions, and other access control options.


=== Built-in Personalisation Rules ===

Start personalizing immediately with pre-configured rules:

= Visitor behavior =
- New vs returning visitors
- Time spent on page (10s, 30s, 1 minute, custom)
- Pages visited
- Last visit date

= Location & Time =
- Country
- Time of day (morning, afternoon, evening, custom)
- Day of week
- Date ranges

= Device & Technology =
- Desktop, tablet, or mobile device detection
- Browser type and language
- Operating system

= User Status =
- Logged in/out status
- User roles and capabilities
- User metadata

= Traffic Sources =
- Referrer URL
- UTM parameters
- Query strings

= WooCommerce Integration =
- Cart contents and value
- Products in cart
- Purchase history
- Customer lifetime value
- Time since last order
- Product categories purchased
- Order completion status


=== Advanced Features ===

**Form Integrations** Capture visitor data seamlessly with native integrations for:
- Gravity Forms
- Ninja Forms
- WS Form

**Block Editor Integration** Works with any WordPress block including:
- Native WordPress blocks
- WooCommerce blocks
- Kadence Blocks
- ACF Blocks

**Performance Optimised**
- Works perfectly with cached sites and CDNs
- Cookieless tracking for privacy compliance
- Lightweight and efficient
- No impact on page load speed


=== See It In Action ===

Visit our [website](https://personalizewp.com/) for detailed documentation, tutorials, and real-world personalization strategies. Check out our [Knowledge Base](https://help.personalizewp.com/) for setup guides and best practices.

If you'd like to find out more about the PersonalizeWP, then you can [visit our website](https://personalizewp.com/), which provides information, knowledge base articles, tutorials, tips and tricks and access to support documentation.


=== Contributing & Support ===

PersonalizeWP is open source and we welcome contributions from the WordPress community.

**Report Issues** Found a bug or have a feature request? Report it on our [GitHub Issues page](https://github.com/filter-agency/personalizewp/issues).

**Contribute Code** Want to contribute? Check out our [GitHub repository](https://github.com/filter-agency/personalizewp) for the latest development version and contribution guidelines.

**Stay Updated**
- [Website](https://personalizewp.com/)
- [Follow us on Bluesky](https://bsky.app/profile/personalizewp.com)
- Sign up for our newsletter in the plugin settings


=== Newsletter ===

Join our email list via the plugin settings to receive updates, tips, and personalization strategies. The signup form connects to [PersonalizeWP.com](https://personalizewp.com/) - see our [terms](https://personalizewp.com/terms/) for details.


== Frequently Asked Questions ==

= What is PersonalizeWP? =

PersonalizeWP is a comprehensive WordPress personalization plugin that lets you show different content to different visitors based on their behavior, characteristics, and context. Built by Filter, it brings enterprise-level personalization features to WordPress sites of all sizes.

= Do I need coding skills to use PersonalizeWP? =

No coding required. PersonalizeWP integrates directly with the WordPress Block Editor. Simply select any block, choose your personalization rules from the sidebar, and decide whether to show or hide content when those rules match.

= Does it work with page caching? =

Yes. PersonalizeWP is specifically designed to work with cached sites, including popular caching plugins and CDN services like Cloudflare. Your personalized content displays correctly without affecting site performance.

= Can I track how visitors interact with my site? =

Yes. PersonalizeWP automatically builds visitor profiles that track page views, form submissions, time on site, and other interactions. You can also add custom profile fields to capture specific information relevant to your business.

= Can I use it with WooCommerce? =

Absolutely. PersonalizeWP includes deep WooCommerce integration with rules for cart contents, purchase history, customer lifetime value, and more. Plus, our Product Collection block makes it easy to show personalized product recommendations.

= What's the difference between segments and rules? =

Rules are conditions you apply to individual blocks (e.g., "show this to mobile users"). Segments are saved groups of visitors who share characteristics (e.g., "Frequent Buyers"), making it easier to target the same audience across multiple pieces of content.

= How does PersonalizeWP handle visitor privacy? =

PersonalizeWP uses cookieless, first-party tracking. All visitor data stays on your server, giving you complete control over privacy and data management.

= How do I get support or report bugs? =

Report bugs and request features on our [GitHub Issues page](https://github.com/filter-agency/personalizewp/issues). For documentation and guides, visit our [Knowledge Base](https://help.personalizewp.com/).

= Can I contribute to PersonalizeWP? =

Yes! PersonalizeWP is open source. Visit our [GitHub repository](https://github.com/filter-agency/personalizewp) to contribute code, report issues, or suggest improvements.


== Screenshots ==

1. PersonalizeWP dashboard screen
2. Rules personalization screen - Add a new rule to use in the Block Editor
3. Segments personalization screen - Add a new segment to organize your visitors
4. Settings screen - signup for our newsletter

== Changelog ==

= 3.5.3 =

* Improvement: The GeoIP database is now stored under `wp-content/personalizewp/` instead of `wp-content/uploads/personalizewp/`. This prevents the 100MB+ database from being included in media-only migrations and backups, where it commonly tripped upload-size limits on managed hosts. Existing installs auto-migrate on first request after update; no action is required. On multisite the database remains isolated per-site.
* Developer: New `personalizewp_geo_database_path` filter to override the database location.

= 3.5.2 =

* Fix: Segment-based display conditions were silently skipped on the front end due to a method-name mismatch in the renderer's filter registration; segment rules now evaluate correctly.

= 3.5.1 =

* Fix: Correctly includes the new Data Export code that managed to be excluded from the 3.5.0 release.

= 3.5.0 =

* Added: New GEO location service that dynamically downloads, and keeps up to date, a database of Countries and their regions. Removes existing distributed database.
* Added: New Rule condition to allow targeting based on a users location within a state / region of a country.
* Added: Allowed anonymous user data to be excluded from Data Exports of Activities.
* Enhancement: Rebuilt the Data Export feature to better work with a much larger quantity of data.
* Enhancement: Updated checkbox settings with clearer descriptions to better work as switches.
* Enhancement: Updated the data export email to state when the export file would be deleted.
* Enhancement: Fixed a variety of misspellings and bad grammer that had slipped through.
* Enhancement: Tweaked many strings used throughout the plugin to minimise internationalisation issues.
* Bug fix: Added missing URL to REST API description to our help website.

= 3.4.2 =

* Bug fix: Remove reliance on current admin user when getting all Membership Teams, causing most of the Teams to not show.
* Bug fix: Ensure invalid Membership Team IDs are not stored against visitors.
* Enhancement: Clear any invalid Membership Team IDs that might be stored against visitors.

= 3.4.1 =

* Enhancement: Remove fixed authorisation nonces from use in JS, fixing potential 403 errors for heavily cached websites.
* Added: Back fill Teams for WooCommerce Memberships on all known visitors when upgrading.
* Bug fix: Undefined array keys 'scheme' and 'host' @props Paul Wong-Gibbs.
* Bug fix: Change export requests from showing a download link when underlying file has already been deleted.
* Bug fix: Fix translation issue causing pagination screen options to disappear on some admin screens.
* Bug fix: Fix issue causing Membership Teams columns and filters to disappear when not using US English language.

= 3.4.0 =

* Added: Integration with Teams for WooCommerce Memberships. Expands all parts of the PersonalizeWP admin to filter by Membership Team, for Recent Events, Profiles, and Exporting.
* Enhancement: Many more actions and filters throughout the admin to allow addons such as the Teams for Memberships to work.
* Enhancement: Exporting activity logs now include a visitors email address, the URL the activity was recorded against, and the result activity lead score.
* Enhancement: The custom events and page view JS tracking module now allows even more customisation via new `addFilter` hooks. Uses @wordpress/hooks as a dependancy.
* Enhancement: Visited Page Segments and Scoring Rules now allow using regex within URLs.
* Performance: Increased optimization of Visitor creation and updating, saving duplicate database writes.
* Bug fix: Ensure direct 'Export Visitor Event Log' links do pre-select the corresponding user. They previously did not.
* Bug fix: Restricted the single visitor auto complete when exporting to a single user. It previously allowed multiple 'single' users to be selected.
* Bug fix: Totals and pagination on Recent Events would sometimes not correctly show, or be inaccurate. They now always show, and better reflect what is in the database.
* Bug fix: Sanitizing of Custom Events within JS now 100% match the same sanitizing in PHP.
* Bug fix: Ensure every screen with table listings can have the pagination quantity customised. Sometimes they weren't showing, and none updated.
* Bug fix: Apply default input types on forms to correct broken styling on HTML structure.
* Bug fix: Updated admin JS to adjust labels with inputs to increase accessibility.
* Bug fix: Tweaks to CSS with various admin UI to better support a variety of screen sizes.

= 3.3.0 =

* Added: Custom Events API. Extend the JS tracking to track custom conversions.
* Added: Recent Events screen. See in order all incoming activity events as they happen.
* Added: Data Export screen. Export any activity events, with powerful filtering on specific event types and with flexible date ranges.
* Enhancement: Improved visitor profile screen with additional information.
* Enhancement: Actions and filters added throughout (to many to list) to allow more customising of the admin, and better support the new screens and Custom Events API .
* Enhancement: Tweaks to admin CSS and JS to better support generalisation and reuse across screens.
* Bug fix: Check for tracking allowed before triggering any JS tracking, fixes potential bypass.
* Bug fix: Fixes to HTML of Segment screen to match other screens.
* Confirms the plugin is tested up to WordPress 6.9.

= 3.2.3 =

* Bug fix: Fix error where personalized blocks weren't being processed when edited by the iframe based block or site editors, causing them to not show publicly.
* Bug fix: Fix CSS error where personalized blocks weren't shown as personalized in the iframe based site or block editors.

= 3.2.2 =

* Enhancement: Group our custom blocks within a PersonalizeWP block category.
* Tweak: Update the logo on our custom blocks to match the new branding.
* Enhancement: Add better sanitizing of URLs when using them for API authentication tokens.
* Bug fix: Fix JS error that occurred on some of our forms that used auto complete fields, causing those fields to be incorrectly disabled.
* Bug fix: Fix loading error that occurred with the WooCommerce Category Quantity in Cart condition, causing it to not appear.
* Bug fix: Fix fatal error that occurred when attempting to uninstall/delete PersonalizeWP.

= 3.2.1 =

* Bug fix: Fix database migration of Pro addon which wouldn't automatically run if you didn't visit your admin.

= 3.2.0 =

* Added: All features previously restricted to the Pro addon are now in PersonalizeWP. Such as Segments, Lead Scoring, Visitor Profiles and Content Variations.
* General: All new branding, with new images and colors throughout.
* Enhancement: Updated admin to better follow plugin guidelines.
* Enhancement: Updated HTML of admin screens for increased accessibility.
* Enhancement: Removal of Bootstrap CSS library, shrinking admin CSS by 83%.
* Enhancement: Database for location detection updated for winter 2025.
* Enhancement: Updates various filters related to personalization of blocks for easier extending by developers.
* Enhancement: Refactoring of many classes for removal of duplicated code and easier maintainence.
* Bug fix: Fix bug with use of User IDs or User Roles with Content Variation Blocks.
* Bug fix: Fix bug with use of WooCommerce Memberships and WooCommerce Subscriptions on Content Variation Blocks.
* Bug fix: Fix JS variable reference when using visitor data on the frontend.

= 3.1.0 =

* Enhancement: Added security with CORS control and API keys to allow headless setups.
* Tweak: Removed feature where blocks using specific rules were counted and linked to. It wasn't a consistent feature, so we've removed it to speed the admin up.
* Bug fix: Re-arranged some of our block editor controls to better follow React standards.

= 3.0.2 =

* Enhancement: Update admin JS to add some extra checks and reduce errors.
* Bug fix: Fix bug when our Personalize panel for blocks would sometimes collapse when it shouldn't.
* Bug fix: Fix bug where a Gravity Form block could no longer be Personalized due to an error occurring with the block editor.

= 3.0.1 =

* Enhancement: Ensure frontend JS can be loaded in any order, in case performance plugins mess with our deferment or script ordering.
* Enhancement: Modernize frontend inline JS to use correct core functions.
* Bug fix: Sometimes updated options in settings didn't show as changed, now they will.
* Bug fix: Ensure schema correctly shows within our REST API settings endpoint.

= 3.0.0 =

* Added: Extended Date Rule condition to allow Days After or Days Before a specific date.
* Added: New User Meta Rule condition to target based on a logged in users meta data.
* Enhancement: Allowed expansion of Rule editing form by PersonalizeWP Pro and other add-ons.
* General: Updated knowledge base links to use newly expanded help system.
* General: Lite rebrand and removal of Pro upsells.
* General: Deactivated the onboarding wizard as it wasn't magical enough.
* General: Added Pro Tracking variables to be sent within API calls, for easier validation.
* Bug fix: Adjusted admin CSS during Rule creation and editing screens.
* Bug fix: Stopped Rules sometimes saying they still needed to have a category.
* Bug fix: Corrected inputs within Rule editing screens sometimes having the wrong placeholder.

= 2.9.0 =

* General: Tweak loading of plugin and settings to support later translations when WP is ready
* Bug fix: Better detect duplicate blocks when duplicating content within WP
* Bug fix: Remove excess HTML shown within Rule create admin screen
* Tweak: Correct spellings of some words to better support default language
* Tweak: Adjust name of action to correct misspelling
* Confirms the plugin is tested up to WordPress 6.8

= 2.8.0 =

* Added: Rules no longer have to have a category.
* Added: Removed default legacy DXP support. Now requires explicit opt-in via our new Performance screen on settings to support non-migrated personalized blocks.
* Enhancement: Any blocks that have been personalized within the block editor now have an outline so they are easier to identify.
* Enhancement: Editor UI icons have migrated from the legacy Dashicons to WordPress' up to date Icon Library.
* Enhancement: Editor UI panels are now closed by default.
* Enhancement: Split up admin CSS to better support Site Editor and Blocks API v3.
* Enhancement: Editor UI limits changes to one panel at a time for clarity. If a panel notices a setting it wouldn't use, it marks itself as disabled. c
* Tweak: Additional Editor UI changes around help text and layout to make things less confusing.
* Tweak: Changes to the Rules editing form, adding help text and highlighting required fields.
* General: Adjusted dashboard tiles, with greater highlight of the features of the Pro addon.
* General: Adjusted titles of menu items.
* General: Removed Black Friday promotion.

= 2.7.0 =

* Added: New browser language Rule condition. Target based on specific language such as Spanish - United States ('es-us'), or more generically Spanish ('es').
* Added: Device Type Rule conditions can now target Windows, macOS and Linux computers.
* Enhancement: Settings screen now warns if attempting to navigate away without saving.
* Enhancement: Various layout adjustments, of screens and the editor UI, especially to better support changes to Pro screens.
* Tweak: Correct invalid HTML usage around field descriptions on Settings screen.
* Tweak: Capitalisation of various button and field labels for consistancy.

= 2.6.0 =

* Added: Blocks within the Site Editor can now be assigned Personalization Rules.
* Added: New UTM Tag Rule conditions for utm_campaign, utm_content, utm_medium, utm_source, and utm_term.
* Added: Plugin added Standard rules can now be edited or deleted if required.
* Enhancement: Performance improvements with our Block Editor UI.
* Enhancement: Database for location detection updated for 2024.
* Bug fix: Days since last visit tracking now correctly, rules using this condition should now display properly.
* Bug fix: Ensure that blocks don't share the same IDs causing incorrect content to be shown.
* Bug fix: Duplicated blocks retain their new IDs, ensuring they can be correctly edited, even when cached.
* Bug fix: Time elapsed rule conditions correctly show their qualifier (30 seconds etc) rather then appearing unset.
* Tweak: Dashboard changes to better highlight Pro features.
* Tweak: Updated our block editor UI, adjusting text and adding help descriptions.
* Tweak: Fix invalid HTML of some admin screens.
* Tweak: Minor adjustments to design of some screens.

= 2.5.0 =

* Added: New WooCommerce Rule on Cart Contents. Add condition based on empty/not empty.
* Added: Rules previously within our Pro addon covering Referrers, Query Strings, Cookies, and WooCommerce Total Spend/Products purchased
* General: Rules are now order alphabetically for ease
* Performance: Adjusted loading to decrease memory usage
* Enhancement: Code modernisation
* Enhancement: Addition of Integration support for 3rd party plugins
* Bug fix: WS Forms now initialise correctly after loading
* General: Update readme with new rules

= 2.4.1 =

* Bug fix: Correct the detection of operating system on mobiles and tablets, which was causing blocks to fail being displayed

= 2.4.0 =

* Enhancement: Added new Rule type, Day of Week. Show/hide blocks based on a particular day of the week
* Bug fix: Ensure correct condition operator value against Rules during creation, fixes empty column values
* Bug fix: Ensure uid param existence before requesting blocks to display
* General: Update rule conditions text to use Title Case capitalisation
* General: Update readme with new rule and clarifications

= 2.3.0 =

* Accessibility: Use button components in PersonalizeWP editor panel to increase keyboard and screenreader support
* Enhancement: Append URL fragment identifier (hash) to query string argument for Rules
* Enhancement: Adjust plugin settings to take better advantage of autoloading options in WP 6.6
* Enhancement: Expand code logic of Rule conditions to allow matching on any singular condition rather than just all
* Bug fix: Blocks located in patterns that contain Personalization settings now use the correct post ID to display on the frontend
* Bug fix: Restore skip redirection check on activation for older WordPress versions between 6.5 and 6.5.4
* Performance: Adjust onboarding message option to remove excess db call when dismissed
* Confirms the plugin is tested up to WordPress 6.6

= 2.2.1 =

* Bug fix: Correct versioning within readme to trigger plugin update
* Bug fix: Relocated JS src file for admin editor

= 2.2.0 =

* Added: Feature to delay initialization of Javascript until user interaction to improve CLS and perceived site speed
* Code Modernization: Optimize script loading to improve frontend speed
* Code Modernization: Optimize admin scripts for block editor
* General: Tweak to Onboarding Wizard so it doesn't trigger so often
* General: Tweaks to admin CSS and our editor panels
* General: Adjustments to some strings to add translation context
* Bug fix: Ninja Form not initialising correctly upon insertion
* Bug fix: Error with newsletter signup if slow/no server response
* Miscellaneous code quality improvements

= 2.1.0 =

* Made the Onboarding wizard UI a little easier to follow
* Increased HTML compatibility across admin with Onboarding wizard
* Bug fix: Styling around our Onboarding, such as an icon not showing within all browsers
* Updated readme

= 2.0.0 =

* Added: New feature, Onboarding wizard to help new users with initial setup
* Updated settings screen to allow easier expanding by premium addons
* Changed notices to better follow default WP admin notices
* Suppress non-PersonalizeWP admin notices when on PersonalizeWP admin pages
* Changed some HTML templates to better follow modern CSS, removing some use of Bootstrap
* Tweaked CSS to allow easier reuse across plugin versions
* Upgraded some parts to more modern PHP, grouping REST API endpoints
* Bug fix: Editing a rule with non-supported rule conditions
* Bug fix: Issue when activating on WP 6.5 not suppressing the activation redirect
* Bug fix: PersonalizeWP block editor panel not working correctly within widgets and site editor
* Removal of lots of legacy admin assets such as images that haven't been used for several versions
* Confirms the plugin is tested up to WordPress 6.5

= 1.2.0 =

* Synchronise design of listing screens with Pro add-on
* Remove dependency on DataTable JS library
* Minify CSS and JS throughout admin and frontend
* Add Pro upgrade link to plugin listing screen
* Simplify development dependencies; removing Gulp, using straight SASS
* Add autoloader for newer functionality
* Tweaks to CSS to bring consistancy across screens
* Miscellenous text changes
* Update license to GPLv3
* Fix formatting of changelog

= 1.1.0 =

* Mark Lead Scoring feature as available for upgrade
* Changed layout of Block Editor panel to read better and be more accessible
* Fix: Empty referrers are now allowed
* Removed the wrapping `<div>`s that were appearing in replaced content causing potential layout issues
* Removes addition of legacy classes on replaced content as not used
* Tweaked admin styles around buttons
* Fixed some pesky typos
* Apply additional WordPress code standards on php files

= 1.0.1 =

* Fix: Adjust script dependencies for block editor JS
* Added Lead Scoring promo to dashboard
* Updated readme

= 1.0 =

* First public version of PersonalizeWP

= 0.9 =

* Internal beta version of PersonalizeWP plugin

== Upgrade Notice ==

= 3.5.1 =
IMPORTANT: Users on 3.5.0 should upgrade to 3.5.1 to fix an incorrect release that missed Data Export changes.

= 3.2.3 =
IMPORTANT: Users should update to fix an urgent bug relating to use of personalized blocks within the block/site editor, ensuring full WP 6.9 compatibility.

= 3.2.1 =
IMPORTANT: Users of PersonalizeWP 3.1 or earlier should immediately upgrade to 3.2.1 or later. 3.2.0+ merges all the features of PersonalizeWP Pro, giving you much more powerful personalization features.
