Fixed: Plugin & Theme Limitations not being loaded, leading to plugins not being hidden, or auto-activated after registration;
Fixed: Site duplicator now deals with plugins that have custom database tables with foreign key constraints – for example, Bookly;
Fixed: Incompatibility between Avada and mapped domains;
Fixed: Incompatibility between Avada and template previewer;
Fixed: Incompatibility with FluentCRM breaking the registration flow;
Fixed: Domain mapping issues on previous build;
Fixed: Payments pending on trial plans;
Fixed: Products with wrong duration after checkout;
Fixed: Sites created in double in some circumstances – specially when using Stripe & Stripe Checkout;
Added: A completely re-designed and re-written SSO module, built to work in a higher level of abstraction to support all current and future possible use cases; It deals natively with:
Security: there’s a token exchange protocol that verifies both sides of the auth process;
Cross-scheme Auth: When we are not able to access remote cookies due to different schemes being used, we force a regular redirect flow to authenticate the customer regardless;
Admin Panel Access: Prevents the auth_redirect function from sending the request to wp-login.php before SSO has a chance to kick in;
Auth for different Domain Options: SSO no longer focuses on mapped domains only. It gets triggered anytime there’s a mismatch between the target domain and the main network domain. This allows it to work with sites that were registered using different domain options offered on checkout;
Loading Screen: the new SSO offers a setting that adds a loading overlay when SSO is being performed on the front-end;
Support to Incognito Mode: most browsers prevent cookies from being set from third-parties, nowadays. Our SSO detects incognito mode and forces a full redirect, instead of trying to authenticate directly with the verify code;
Added: Placeholders on Thank You page snippet code editor, to pass values to conversion snippets;
Added: Country classes with state and city lists to allow for more granular control over how taxes apply territorially, as well as to guarantee that valid billing address info is entered during checkout. At the moment, the following countries are supported: US, GB, BR, FR, RU, DE, NE, ES, CA, CN, ZA (this list was devised based on our current customer base, new countries can be added as requested).
Added: REST API field requirements and descriptions are now compiled and saved as static files at build time. This is done because we use reflection on PHPDocBlocks to generate the documentation of the fields, and comments might not be available if op_cache is enabled on production, causing the REST API to break;
Improvement: Add CNAME records from Cloudflare to the DNS checking results, in addition to A and AAAA;
Improvement: Updated DNS lib to prevent memory leaks when checking for DNS;
Improvement: Adds fatal error catcher when the DNS resolver runs into a memory limit error, although this no longer happens due to the above fix;
Improvement: Using CSS grid to lay fields on the checkout field instead of flex/float. This cleaned up the fields markup a good bit and makes it more customizable. By default, the checkout form is a two-column grid, with fields spanning the two columns;
Improvement: Better responsiveness on the checkout form, resulting from the use of CSS grid;
Improvement: Replaced the old hacky implementation of the Site URL prefix and suffix blocks (disabled inputs) with a proper flex block with a prefix and suffix element;
Improvement: Checkout field blocks use less opinionated HTML tags (div, instead of p) to maintain semantic value and escape the default spacing CSS rules applied to paragraphs;
Fixed: Negative values on sign ups by country widget;
Fixed: Remove the email error message on sign up validation;
Fixed: Taxable toggle on product update;
Fixed: Discount code migrator not bypassing validation rules;
Fixed: Error on site creation process passing the customer rules in the main site;
Fixed: Makes sure the auto-submittable script is only added after wu-checkout was loaded;
Added: Filter available templates on template viewer with selected products in checkout form;
Added: Option to add a page on main site to redirect customer in blocked sites;
Added: Hide customer sites from network admin top bar;
Added: Created the wu_bypass_unset_current_user filter to allow developers to bypass the user unset on multiple account feature;
Added: Possibility to see and change on customer admin page, the customer custom metadata set when user sign up.
Added: An public api to customer meta data that handles sign up form titles and types of fields;
Added: Memory trap to avoid memory limit fatal errors in some cases;
Added: Support for Jetpack plugin in mapped domains;
Added: Stripe Portal for customer payment manage;
Added: Option to add a custom redirect path in Login block;
Added: New image upload field layout with the stacked option;
Improvement: New field for company logo on settings;
Improvement: Block frontend site when a membership is not active;
Improvement: sunrise.php install step on WP Ultimo Install Wizard;
Improvement: better define of SUNRISE constant on wp-config.php on WP Ultimo Install Wizard;
Improvement: Better UX on thank you page, showing if the site is in creation process;
Improvement: Breaks the gigantic functions/helper.php file into lots of different small files with specific public apis, allowing us to make sure we only load what we really need in a sunrise time;
Improvement: Adds a sunrise meta file to control whether or not we need to run ultimo tasks when Ultimo is disabled or not present;
Improvement: First step in the direction of removing jQuery as a checkout form dependency given by dropping jQuery Migrate as a dependency;
Internal: Replaced all development scripts, build tasks, and more with the internal development library called MPB;
Internal: Adds the Query Monitor panels to help debug issues while developing WP Ultimo core;
Internal: Adds the development sandbox toolkit that allows developers to run and listen to particular events in a isolated context. Useful for timing how long a given hook takes to run, or to trigger build tasks that rely on a real WordPress installation running Ultimo to work;
Internal: Updated node dependencies to their latest versions;
Internal: Switched Tailwind to JIT mode, to save precious KBs on the generated framework.css file;
Internal: Removed PHP Scoper as a composer dependency (it is now handled directly by MPB);
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
The cookie is used by cdn services like CloudFare to identify individual clients behind a shared IP address and apply security settings on a per-client basis. It does not correspond to any user ID in the web application and does not store any personally identifiable information.
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Advertisement".
This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
5 months 27 days
This cookie is set by the provider Lucky Orange. This cookie is used to identify the traffic source URL of the visitor's orginal referrer, if there is any.
This cookie is installed by Google Analytics. The cookie is used to calculate visitor, session, campaign data and keep track of site usage for the site's analytics report. The cookies store information anonymously and assign a randomly generated number to identify unique visitors.
This cookie is installed by Google Analytics. The cookie is used to store information of how visitors use a website and helps in creating an analytics report of how the wbsite is doing. The data collected including the number visitors, the source where they have come from, and the pages viisted in an anonymous form.
This cookie is set by the provider Lucky Orange. This cookie shows the unique identifier for the visitor.
This cookie is set by the provider Lucky Orange. This cookie is used to show the total number of visitor's visits.
This cookie is set by the provider Lucky Orange. This cookie is used to identify the ID of the visitors current recording.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
This cookie is set by Facebook to deliver advertisement when they are on Facebook or a digital platform powered by Facebook advertising after visiting this website.
This cookie is a browser ID cookie set by Linked share Buttons and ad tags.
The cookie is set by Facebook to show relevant advertisments to the users and measure and improve the advertisements. The cookie also tracks the behavior of the user across the web on sites that have Facebook pixel or Facebook social plugin.
1 year 24 days
Used by Google DoubleClick and stores information about how the user uses the website and any other advertisement before visiting the website. This is used to present users with ads that are relevant to them according to the user profile.
This cookie is set by doubleclick.net. The purpose of the cookie is to determine if the user's browser supports cookies.
5 months 27 days
This cookie is set by Youtube. Used to track the information of the embedded YouTube videos on a website.