== Changelog == = 5.1.0 (03-09-2026) = **New:** - A form styler for **WS Form**, in both builders — the twelfth, taking the free library to 68 modules. WS Form was assessed once before and set aside as unstylable, because it is the only one of the twelve that renders no fields in PHP at all: its shortcode returns an empty `
` element and its own JavaScript builds the form in the browser. That turns out not to matter on a published page, where the script has run long before anyone sees it, so the styler's CSS applies to the form exactly as it does for every other plugin. What it does affect is the builder, which would otherwise show an empty box with nothing to style. Ninja Forms, the other plugin that builds its form in the browser, prints the field definitions inside the markup its shortcode returns, and its preview is rebuilt from those; WS Form carries no such payload anywhere — only a form id — so the preview is rebuilt from WS Form's own PHP instead. It is a reconstruction rather than the live form: WS Form does offer a public function that would populate the container, but calling it would start a working form inside the page you are editing, with its own validation and submissions, which is not what a styler wants on a canvas. Every one of the twelve design groups has something to aim at, including the per-field validation message and the required-field marker that most of the sibling stylers have to improvise. WS Form marks parts of its own styling `!important`, including forcing the placeholder colour transparent when labels sit inside their fields, so the field, label, description and button styles answer with Divi's own important flag rather than a longer selector that could not win. - An extension's settings now have a screen of their own rather than a dialog. Six settings whose choices each need a paragraph to explain did not fit in a modal — it scrolled before it was finished. The gear on an extension's card is a real link now, so a settings screen can be bookmarked, opened in a new tab, or sent to somebody by support. - The settings on that screen are drawn from a description the server sends, not from a panel written for one extension. Login Experience's four page assignments used to be hard-coded into the admin bundle, which does not generalise: an extension belonging to Squad Modules Pro could not appear there without this plugin carrying knowledge of a plugin that may not be installed. An extension now advertises its own settings endpoint, the gear appears on its card, and the screen renders whatever the endpoint describes — so a premium extension can add a setting without a new build of the free plugin. A control this version does not recognise is skipped rather than guessed at, which is the case of an older free plugin being asked to draw a newer premium one's field. **Fixed:** - Enabling an extension from the extensions screen, reading an extension's details, and the list of every extension with its active state all quietly did nothing. The registry is a list, and six places looked entries up by name as though it were keyed by one, so each lookup missed. The list of every extension with its active state was the worst of them: it read the list's numeric index as an extension name and passed it where a name was required, which threw and was swallowed, so it returned nothing at all on every site. A registry entry is now found by its name wherever it is needed. - Premium extensions appeared twice on the extensions screen when Squad Modules Pro was active. Both plugins register an entry under the same name — the free plugin an advertisement, Pro the real thing — and nothing reconciled them. The one with an implementation now wins, and keeps the position the list already had so turning Pro on no longer reorders the screen. The same guard covers the module registry, which has no duplicates today but is built the same way. - Three of the four Quick actions on the dashboard led nowhere. Leave a review, Get support and Join the community rendered as ordinary links with nothing behind them — the tiles asked for addresses the plugin never sent. All four work now, and support goes where it should: the WordPress.org forum for this plugin, and priority support when Squad Modules Pro is active. - A script or stylesheet whose file is missing is no longer handed to WordPress. It used to be requested anyway, so the browser fetched a file that was not there, nothing was written to the log, and the only symptom was whatever depended on that bundle silently not working. The file is now checked first and skipped with a warning naming the handle. Assets loaded from another server are not on disk and are unaffected. **Compatibility:** - WordPress 7.1 is declared as tested. Every change in the 7.1 field guide was checked against the code rather than assumed: the iframed post editor (this plugin has no post- or block-editor integration — Divi 5 modules are Divi blocks, registered through Divi's own API), the `@wordpress/components` changes (the package is not used), jQuery UI 1.14.2 (no dependency), and the persistent toolbar (nothing is added to it). **Developer:** - A Divi 5 module belonging to another plugin can point at its own build directory. Resolving that folder used to be one line inside the registration method, so the premium plugin overrode the whole method in all 29 of its modules — and lost the wrapper this class puts around the render callback. Two things live in that wrapper: dynamic-content resolution, without which a field renders its raw token instead of the value it stands for (21 of those 29 modules declare such fields, and none of them resolved), and the recording of the block name, which was empty for every one of them. The folder is now its own overridable step. - A module that extends Post Grid gets CSS for the design groups it declares, on the page and on the canvas alike. Both sides used to write out a fixed list of seven groups, which is correct for Post Grid and the wrong shape for a module built on it: a subclass's own groups had fields in the Design tab and no CSS anywhere. The list is now read from whichever module is rendering. - The preset-bucket guard finds a field's boundaries by counting braces instead of matching to the next quoted key, so a field whose value contains a nested object is no longer mistaken for its neighbour. - The end-to-end design suite rebuilds a module's generated metadata when it no longer matches its source. Divi 5 reads a module's selectors at render time from the built copy rather than the source, and that copy is not in version control, so it drifts — and a stale one makes Divi write those design groups with no selector at all. The suite then reports them as not applying, which is indistinguishable from a real styling bug and cost a full investigation. The check compares content rather than timestamps, because the build leaves an unchanged file alone. - `yarn test:e2e:prepare --enable-registration` turns public registration on for a fixture site, so the Register Form module renders its form instead of its "registration is disabled" notice and its six design groups can be measured. Opt-in on purpose: the fixture generator will not open a site to public sign-ups on its own. = 5.0.0 (22-08-2026) = **Breaking:** - The MetForm form styler has been removed. MetForm builds its forms for Elementor rather than Divi: a MetForm form placed in a Divi page is an Elementor document rendered by Elementor, which writes its own CSS for each field scoped to that page and widget — four classes deep, with ids that differ per form — so the styler's colours and fonts lost to it every time and could not be made to win. Its fields are Elementor widgets too, which left the select-field settings with nothing to style. The module had also stopped registering: the class it detects MetForm by does not exist in current MetForm, so it was unreachable in the builder. A page still using the module will show it missing; the module was off by default, so this reaches only sites that turned it on and built with it. **New:** - A button icon can be kept out of sight until the button is hovered in Divi 5, on Flip Box's two slide buttons, Dual Button's pair and Post Grid's Load More, with the choice of revealing it on its own or letting the text move with it. Both settings exist in the classic builder and had nothing to convert to. - A button can show an image in place of its icon in Divi 5, on Flip Box's two slide buttons, Dual Button's pair and Post Grid's Load More. All three offer the choice in the classic builder and rendered only the icon, so an image chosen there arrived with nothing to show it. - Post Carousel can space the parts inside each slide and align their text in Divi 5. The spacing settings the classic builder offers for a slide's element wrapper and its individual elements had no counterpart, and a converted page dropped them. - Seven more form stylers can style the message shown against a field that failed validation: WPForms, SureForms, Fluent Forms, Formidable, Everest Forms, Happyforms and weForms. Only Gravity Forms and Ninja Forms had settings for it, so on the others the classic builder's spacing for that message arrived with nowhere to go. - Business Hours can draw its divider between each day and its hours in Divi 5. The line's colour, style, thickness, length and corner rounding are settings the classic builder has; the Divi 5 module styled the line but never rendered it. - Post Reading Time can draw its divider line in Divi 5. The line's colour, style, thickness, length, corner rounding and position are all settings the classic builder has; the Divi 5 module styled the line but never rendered it, so none of them had anything to apply to. - Three last settings from the classic builder now work in Divi 5: the spacing around a Flip Box slide's icon, the colour of a label beside a checked Gravity Forms choice, and the space above and below a Gravity Forms footer. Each needed writing directly — a checked label is a state rather than an element, and the footer's spacing comes from the form plugin's own variables. - The Load More button on Post Grid can be styled in Divi 5: the icon's colour and size, the gap between icon and text, a width of the button's own, how its contents sit within it, where it sits across the grid, and the colour and size of the spinner shown while the next set loads. Divi styled the button but none of what is inside it. - The Ninja Forms styler gained its form title, its per-field validation message and its field heights in Divi 5. The title and the validation message had no settings of their own, and the height of a field could not be set at all — Divi styles these fields natively, which covers everything about them except how tall they are. All three are settings the classic builder has. - The Divider can fill, outline and clip its own text in Divi 5, the same way Typing Text now can: a fill colour inside the letters, a stroke around them, and the module's background showing through them rather than behind. The classic builder has offered this on the divider's text since it shipped. - Every form styler can colour and size its checkboxes and radios in Divi 5. All eleven offered both settings and neither did anything: browsers draw these two controls themselves and honour only one colour property, which Divi has no setting for, and the size had to be applied to the inputs alone rather than to the labels beside them. Both work now, in all eleven, and a page converted from the classic builder keeps what it set. - Typing Text can fill, outline and clip each piece of its text in Divi 5. The prefix, the typed text and the suffix each take a fill colour inside the letters and a stroke around them, and can show the module's background through the letters rather than behind them. The classic builder has offered all of this on all three pieces; Divi 5 had none of it, so a heading built this way converted to plain text. - Each button in a Dual Button can be styled on its own in Divi 5: the icon's colour and size, the gap between icon and text, whether the icon leads or follows, a width of the button's own rather than one that fits its text, and how its contents sit within it. The separator between them has offered all of this since it shipped; the two buttons had only their text, link and icon, so a page that styled them in the classic builder arrived unstyled. - A Flip Box button can be laid out and given its own icon styling in Divi 5, on each side independently: the icon's colour and size, the gap between icon and text, whether the icon leads or follows, a width of the button's own rather than one that fits its text, how its contents sit within it, and where the button sits across the slide. All eight are settings the classic builder has, and a converted page keeps them. - A Flip Box slide can arrange what it holds in Divi 5: where the icon sits relative to the text and how much room it takes, how the icon lines up within that room, how large an image used in place of an icon is, how the text is aligned, and the space between the slide's parts — each side on its own. All nine have been in the classic builder since it shipped and a converted page keeps them. - Flip Box slides can be arranged, layered and timed in Divi 5. The parts of a slide — icon, title, sub-title, body and button — can be reordered within it and lifted above one another where they overlap, on each side independently, and the flip's own duration, delay and speed curve are settable rather than whatever the stylesheet happened to say. All three have been in the classic builder since it shipped, and a converted page now keeps the arrangement it had. - Each side of a Flip Box can be styled on its own in Divi 5. The module carried no per-element design settings at all, so a background, a title colour or a button style applied to both faces at once or to neither — an odd limitation for a module whose whole point is two different faces, and the reason 91 of the classic builder's settings had nowhere to go. The slide, icon, title, sub-title, body and button are now separately styleable on each side, and a page converted from the classic builder keeps the typography, icon colour and size, and slide spacing it already had. - Post Grid and Post Carousel let you pick categories and tags from a list in Divi 5. Both settings were text boxes asking for comma-separated term ids, which meant looking each one up by hand, and the classic builder's "All Categories" and "Current Category" choices could not be expressed at all — they are words rather than ids. Both now show the site's own terms as a checkbox list, with those two choices at the top of the categories one, and start on All Categories rather than on nothing. The terms come from the list Divi already publishes to the builder, so no extra request is made for them. - A form styler for **weForms**, in both builders. weForms is the one form plugin the big Elementor add-on packs style that this library did not — Essential Addons and Happy Addons both ship a widget for it — and it renders in PHP through `[weforms id="…"]`, so the same twelve design groups apply. It is built on WP User Frontend and keeps that vocabulary: the form is a `