The shared-core release. Form entries, activity logs, bookings, email logs and redirects now run through one layer in Minn that asks each plugin's own question about who may see or change what, and says a change worked only once it has. A key or token the database browser hides is now hidden on every other screen too, and a save that would write its placeholder back over the real key is refused instead. wp minn install switches a WordPress site to Minn from the command line, and PDF Invoices & Packing Slips documents show on your orders. The cycle opened by fixing every finding from the review of the shipped 0.45.0 (two medium, eighteen low) and closes with a full review of the release candidate: nothing critical or high, one medium issue (a Pods field the plugin refused could leave a new draft behind on every retry) and twenty-six low. Two more reviews of the fixes found four lows of their own. All of it is fixed before release, each fix with a test that fails without it.
Added
wp minn installswitches a WordPress site to Minn. With Minn Admin active, WP-CLI gainswp minn preflight, which reports what the site will and will not get on Minn without changing anything, andwp minn install, which downloads Minn from the Minn update service, checks it against its checksum and its release signature, shows that report, and after you confirm runs the site on Minn. WordPress's own files move to a folder beside the site, and wp-config.php, wp-content and the database stay as they are. Once Minn runs the site,wp minn ejectbrings WordPress back.- Invoices from PDF Invoices & Packing Slips on your orders. With PDF Invoices & Packing Slips for WooCommerce active, the orders list shows each order's invoice number in an Invoice column, linked to the invoice PDF, and right-clicking an order opens any of its documents. The order page and quick view have a Documents card with a PDF button for every document, and for the invoice its number, date and notes, with Create, Edit, Regenerate and Delete. Changes go through the plugin, follow its own rule for who may change a number or a date, and say they worked only once the order really holds them.
Improved
- Form entries share one core. Entries from Gravity Forms, WPForms, Fluent Forms, Ninja Forms, Formidable, Forminator, Everest Forms, SureForms, Elementor forms, Flamingo and CFDB7 now run through one shared layer in Minn. It checks who may see and change each entry, keeps each person to the forms they are allowed, and never reports a change as done unless it really happened. Nothing changes on screen.
- Activity logs share the same core. WP Activity Log, Stream, Activity Log, Simple History, All-In-One Security, Solid Security, Wordfence, Limit Login Attempts Reloaded and Sucuri now run through the shared layer the form entries use. Each status card counts only the events its list would show you, and releasing a lockout or unlocking an address says it worked only once it really has. Nothing else changes on screen.
- Bookings share the same core. Amelia, Bookly, JetAppointments, JetBooking and LatePoint, event registrations included, now run through the shared layer too: every view, count and chart holds each person to the staff, providers, locations or vendors they may see, and approving, cancelling or deleting a booking says it worked only once it has.
- Email logs share the same core. FluentSMTP, Gravity SMTP, Post SMTP, Site Mailer, SureMails, WP Mail Logging and WP Mail SMTP now run through the shared layer too: every log, message, count and chart answers to each plugin's own permissions, and deleting, resending or reactivating says it worked only once it has. A resend whose mailer reports a failure now says so instead of reporting it sent, and deleting a Post SMTP entry also removes the details Post SMTP keeps beside it.
- Redirects share the same core. Redirection, Rank Math, Safe Redirect Manager, Simple 301 Redirects, 301 Redirects and Broken Link Checker now run through the shared layer too: adding, editing, enabling or deleting a redirect says it worked only once it has, and an address that already has a redirect is refused instead of quietly rewriting it, in Rank Math and when renaming a Simple 301 Redirects rule.
- Keys and tokens never leave Minn by accident. A licence key, an API token or another credential that Minn's database browser hides is now also hidden from every other screen in Minn, wherever it turns up, even inside a log or a link. Screens that hand you a key on purpose, such as the WP Migrate connection info, the Disembark command and one-time login links, still show it. Saving a screen that showed a hidden key keeps the real one; a change that would still save the hidden placeholder is refused with a message asking for the real value, and an Elementor, Bricks, ACF or ACPT export that would carry a key is refused instead of handing out the key.
- Email previews show only what the entry holds. Previewing or test-sending a form notification in Minn fills in the entry's answers, the form and the site, and as much of the person's name and email as the plugin's own entry screen shows you. A tag that would read more of their account, the page they sent it from, or anything another plugin adds stays a visible placeholder, and a Gravity Forms test send runs no shortcodes, as the preview runs none. Real notifications are unchanged.
- Editing a post type or taxonomy saves only what you changed. If someone else changed the same post type or taxonomy after you opened it, Minn asks you to reopen it instead of undoing their change.
- Undo on the site's look never removes someone else's change. Undo after applying a style, mixing colors or type, pasting a look or resetting it puts back the look you had just before, and refuses if the look changed again since, in another tab or the Site Editor.
- On Minn, an editor that needs the Minn Legacy Pack offers it. The editors of Elementor, Brizy, Beaver Builder and Bricks run on WordPress's own editor scripts, which a site running Minn gets from the Minn Legacy Pack. When the pack isn't on yet, "Edit in Elementor" (or the builder you use) now stays in the row menu and the editor's banner, and following it asks to install the pack from the Minn update service, then opens the editor. The Plugins tab offers it too. Someone who can't install plugins is asked to check with an administrator. And when a plugin's scripts on your public pages need WordPress's own scripts (WooCommerce's product options and block cart do), the Overview says which plugin needs the pack, names a page where visitors hit it, and offers to install it.
Fixed
- A booking card counted pending bookings twice. The Next 14 days chart on Amelia, Bookly, JetAppointments, JetBooking and LatePoint drew each pending booking in both the booked and the pending part of its bar. Each booking now counts once.
- A network site's administrator sees the site's members in Users. On a multisite network the Users list showed a site's administrator only their own account. It lists every member again, as WordPress's own Users screen does, with the role change and Remove from this site for each one.
- The block editor button opens template parts in the Site Editor. While editing a template or template part, the inspector's button, the ⌘K command and ⌥-clicking the WordPress button all sent you to wp-admin's post list instead, because WordPress's post editor can't open a template. They now open that template or part in the Site Editor, saving what you typed first.
- A restored Everest Forms entry comes back to Received. An entry trashed by another tool without a note of its earlier status was restored to no status at all: it vanished from every filter and could not be trashed, marked or deleted again.
- Edit in Elementor from the content list, and on Minn. A page built with Elementor (or another page builder) now offers "Edit in Elementor" in its row menu in Content, beside the editor's banner. On a site running Minn, both used to be hidden because Minn has no wp-admin; Minn now opens a page builder's own editor while the Minn Legacy Pack is active, and tells Minn Admin which ones it can open, so those links stay and every other wp-admin link is still left out.
- Add plugin searches WordPress.org on Minn. On a site running Minn rather than WordPress, the Add plugin dialog still said WordPress plugins would install but never run there, and hid the directory search and the plugin catalog. Minn runs WordPress plugins now and reads the directory through its own update service, so the dialog offers the same search and catalog as on WordPress, with the zip URL and GitHub release field kept beside them.
- The form status cards speak your language. The hint under Unread entries ("12 total, 3 spam") was always in English. It now follows your language like the rest of the card, and Elementor's reads "in trash" as the other plugins' cards do.
- A PW Gift Cards resend says it was sent only when it was. Resending a gift card whose recipient is not an address WooCommerce can mail (a typo, or two addresses with only a space between them) said the card was sent while WooCommerce sent nothing. Minn now says nothing was resent, and resends only to the addresses WooCommerce accepts.
- Saving a new category or tag base keeps your permalink structure exactly as it was. Before, it also rewrote the structure, giving one stored without a leading slash one, and refused the save when the structure had no tag.
- Custom CSS shows the stylesheet as it is saved. Settings → Design showed the copy visitors get, which other plugins may add rules to, and saving an edit wrote those rules into your stylesheet. Saving without a change writes nothing, and if someone else saved the CSS after you opened it, Minn asks you to reload instead of overwriting their change.
- Changing one color of a custom palette keeps the rest. On Your profile, a person's page and the site default, a save that names one color now leaves every other color as saved.
- Saving role defaults keeps what the page cannot show. A policy for a role that isn't registered right now and the sign-in policy of a role without Minn access stay as saved, and a role that kept a Minn toolbar after losing Minn access no longer blocks every save. If another administrator saved role defaults after you opened them, Minn asks you to reload.
- Swapping an Overview card keeps the cards you can't see right now. A card that is hidden for the moment (a WooCommerce card while WooCommerce is off) stays in its slot when you change another one.
- A style edit keeps styles saved for blocks this site doesn't know. Editing a color or font in Styles, or using a palette or typeset, no longer deletes the styles saved for a block or block style the server doesn't register.
- Island previews never resolve a plugin's dynamic content for a writer who may not author it. When someone without permission for unfiltered HTML (a Contributor or Author) previews a block, Minn now turns off every plugin's and theme's block-rendering code and every shortcode for that preview, so a plugin such as Otter, JetEngine or Kadence Blocks Pro cannot read options, other people's drafts and private posts or other users' details through it, even when its markup is tucked inside an ordinary block or a link, or (as Otter's excerpt code did) the plugin switches its resolver back on halfway through. An administrator still sees the full preview.
- The editor keeps a post's title as it is stored. Opening a post decoded its title and every save sent it back, so inline tags such as
<em>were lost, and a title holding escaped markup (what the block editor stores when someone types a tag) became live HTML the next time an editor or administrator saved the post in Minn. The title box now holds the title exactly as stored, and a save sends it only when you change it. - Post type and taxonomy edits keep what you did not change. Saving one setting no longer rewrites the labels or the description: the description keeps its links and line breaks, and is a multi-line box now, labels stay exactly as Custom Post Type UI, ACF or JetEngine stored them, and an edited description keeps its links, as CPT UI's own screen does. Turning on one switch no longer writes the other switches, the supports or the taxonomies from what WordPress registered, so a setting another plugin or your theme adds while the site runs stays out of Custom Post Type UI, ACF, JetEngine or Minn's own definition; ACF keeps its own title.
- Opening a rich-text field never changes it. The rich-text dialog for ACF and other editor fields removed email, phone, jump, relative and inline-image links, and embeds for someone who may post HTML, the moment it opened, even when you pressed Apply without typing. It now gives back exactly what the field holds unless you edit it, and an edit keeps those links.
- Your appearance choices stay yours. Changing a palette, a font or the default-admin switch sent every appearance setting the page had loaded, so a Minn bar or palette choice made since in another session, or by an administrator, was put back. Each click now saves only what it changes, and a user's page never touches their Minn bar setting.
- Pasting never rebuilds a block from copied markup. Markup that copied Minn's own block cards, which any web page can put on the clipboard and a Contributor can put in a post, made a paste duplicate another block of the post or turn it into a Shortcode block on save. A pasted card now pastes as what it shows.
- Content made to look like one of Minn's cards can no longer change another block. A post could carry markup dressed as Minn's Buttons, Details or Columns cards, or as an upload in progress, and when an editor reviewing it clicked, saved or uploaded, Minn changed a different block of the post: rewrote it as Buttons, removed a column, or put the uploaded image somewhere else. Minn now acts only on its own cards and uploads.
- Opening a post in the editor never runs its scripts with your session. To match the front end's styles the editor loaded the post's public page in a hidden frame inside the app, so a script that an author allowed to post HTML had put in a post ran with an administrator's session as soon as they opened it. The styles now come from a sandboxed copy that cannot reach the app, and Otter's style warm-up works the same way. Saving a post also no longer runs a script stored in its content, which the editor's working copy of it could.
- Editing a form entry's checkboxes keeps every pick the visitor made. On Gravity Forms, WPForms, Ninja Forms and Elementor entries, a pick the form no longer offers used to vanish at the first save of that answer. It now shows as a ticked box marked "no longer on the form" and stays unless you untick it. Ninja Forms lists that a site fills when the form renders are offered too, an Elementor option with a comma in it stays whole, and on a WPForms field that shows choice values the kept pick keeps its label in WPForms' own entry view and export.
- Template renames keep the title you did not change. In JetThemeCore and Elementor templates, saving the rename dialog without a change stored "(no title)", a decoded copy of the title or a cleaned one ("50%DEAL footer" became "50AL footer"). The title is written only when you change it.
- A settings field you typed into and put back is no longer saved. On settings tabs, Site Options pages, Store settings and its dialogs, and in Minn's own Settings (a switch flipped back, a tagline with a line break), a field counts as changed only when it now reads differently from when the page opened, so the plugin never rewrites a value you left alone.
- Editing a form entry keeps an "Other" answer that only had focus, and a text answer you typed into and put back.
- Apply in the block settings and the ACF toolbar changes only the fields you changed. A number no longer turns into text, a line break is kept, an unset choice stays unset, and a block you changed nothing in stays exactly as stored.
- The link and image popovers keep what you did not change. A link keeps its nofollow and its other rel words when you switch "open in new tab", and changing an image's alt text keeps the caption's links and emphasis and the link's rel.
- Menu item, term and excerpt edits save only what you changed. Saving a menu item with nothing changed writes nothing, a label-only edit on a webcal: link is accepted, and renaming a term no longer resends its description.
- WooCommerce emails, payment methods and shipping methods keep a field you cleared. An email's additional content, a payment method's description or a shipping method's title that you emptied on purpose showed WooCommerce's default text in Minn, and saving any other field of that form stored the default. It now reads back empty and stays empty.
- 301 Redirects and Simple 301 Redirects keep a source or target you did not change. Changing only the status or the other address decoded and cleaned an address stored with encoded characters, so
caf%C3%A9becamecaféorcaf(renaming a Simple 301 rule) and50%DEALlost%DE. An address you leave alone is now written back exactly as stored, and a save that names only one field keeps the other. - Rank Math redirect edits keep the sources and a relative target as Rank Math stored them. Changing a redirect's type or target rewrote its sources in a form Rank Math no longer recognised as the same rule, so adding that source again elsewhere made a duplicate, and a relative target such as
/newwas made absolute. - FluentSnippets saves keep a snippet's code and tags exactly as stored. Saving a snippet, or switching it on or off, removed the first line's indentation and any blank lines at the top of a PHP snippet, and rewrote its tags.
- WPCode text snippets keep code you did not change. When someone without the unfiltered HTML capability changed a text snippet's priority or type, its code was filtered again, so an embed an administrator had added was removed. Only code that is changed is filtered now.
- An event's cost and website stay as stored when you change another event detail. The Events Calendar's own save decoded and stripped them, so a cost such as
Under <$20becameUnderand&in a website became&. - PowerPress episode details survive a backslash. Editing an episode whose details held a backslash (an episode title such as
AC\DC live) made all its extra details, the duration and chapters among them, unreadable. An unchanged media file URL is no longer rewritten either. - Adding a photo to a Jetpack tiled gallery keeps the photos already in it. Their alt text, links and custom links were replaced from the media library, and the gallery lost its crop setting. Only the added photo is read from the library now.
- Agent Access keeps switched-off abilities listed with Novamira 1.12.9. On a site where Agent Access is the first thing to load WordPress's abilities in a request, an ability you had switched off showed without its name and description, and one whose Novamira feature is off was missing from its tab.
- FluentSMTP: saving its settings keeps "keep logs forever". A stored log retention of 0 days, which means forever, was saved as one day, so the next daily clean-up would have deleted the email log. A setting you did not change is no longer written at all.
- Gravity Forms: editing one part of a form, a notification or a confirmation leaves the rest as stored. Sub-label markup, the add-on data and prices on the other choices, notification names and From names, routing and conditions, and a confirmation's link to a deleted page all stay as Gravity Forms stored them.
- WPForms: editing an entry keeps the name and address parts the form no longer shows, and editing a confirmation keeps its name, type, page and redirect. A confirmation whose page was deleted could not be edited at all; now it can.
- Fluent Forms: editing the confirmation keeps a redirect address, page and form behaviour you did not change.
- Perfmatters: a field you typed into and put back keeps its stored value, DNS prefetch lines included.
- The ACPT group builder keeps what you did not change. Saving a group cleaned every label, description, box label, choice list, default and number setting again, so markup or a code like "50%DEAL" in a label was lost, a choice without its own label took its value, a choice with spaces around it lost them and its default, a group without a label took its name as one, and a stored step of "any" refused the save. Each one now stays as ACPT stored it unless you change it.
- Ticking a box in an ACPT checkbox list saves again. When the list held an option such as "50%DEAL", Minn sent it as "50AL", ACPT refused the list and nothing was saved. Options now go exactly as they are.
- An ACPT field save says it worked only once it did. A value ACPT does not accept, such as a choice the field does not offer or a number above its maximum, was not stored while the save reported success. The editor now shows which field was not saved and keeps it unsaved, and everything else, other plugins' fields included, is saved.
- ACF field edits and the group builder keep a field's choices. Saving a field, or a group in the builder, read every field's choices back from their text, so a choice label holding " : " lost its end, and the builder turned a step of "any" into 0. Settings you did not change now stay as ACF stored them, and a group save no longer adds a Minn setting to the group.
- Ticking a box keeps the picks the field no longer offers. In the ACF and JetEngine panels, ACF and JetEngine options pages and JetEngine content type items, ticking a box dropped any stored pick the field no longer shows (a choice removed since, an ACF "Allow Custom" entry), and in an ACF repeater it dropped them from rows you did not touch. Those picks now stay.
- JetEngine checkboxes with number keys show what is ticked, and "save as array" checkboxes save on options pages. A checkbox whose options are numbers showed nothing ticked and ticking one cleared the others, and on an options page ticking a "save as array" checkbox stored an empty list.
- A JetEngine content type keeps its own Title field. A type with a field named title showed another field's text or the item number there, and saving any change stored that as the title.
- Custom CSS & JS: an untitled snippet stays untitled, and a name like "50%DEAL" survives a code edit. Saving a snippet stored "Untitled CSS" as its title, or cleaned its name, even when you changed only the code or the switch.
- WPCode, Header Footer Code Manager and FluentSnippets: an edit keeps a name or description you did not change. Changing only a snippet's priority, device or type cleaned its name, description and tags too, so "50%DEAL" lost "%DE", inline markup was stripped and a description lost its line breaks.
- Novamira: changing a memory's type leaves the rest of it as written. Its name, description and content were cleaned on every save, so the content lost its tags and code when only the type changed.
- Bricks: a template edit that leaves the title alone keeps it as stored. A title holding both an entity and inline tags had its tags turned into text by an edit that changed only the template type.
- A JetSearch weight edit leaves the suggestion's text alone. Names like "50%DEAL" or "Shoes <50" were rewritten whenever a suggestion was saved, even when only its weight changed. The name is now written only when you change it.
- WP Freighter: an unnamed tenant stays unnamed. Saving a tenant, or changing only its domain, stored its hostname or "Tenant N" as its name. The name is kept as WP Freighter stores it, empty included.
- The database browser follows each plugin's own rule for who may read what. A table whose plugin keeps you off its own screen is now left out of System › Database and answers Unknown table, as Minn's own view of that plugin already refuses: PW Gift Cards' privilege, WP Activity Log's only-admins or only-me, Simple History's stealth mode, Stream's role access, Activity Log's role scoping, WP Mail Logging's capability, and the rule of every log and store Minn reads through its shared layer. Gravity Forms' entries, Burst's and Koko's statistics, Solid Security's tables and the visitor logs of WP Statistics (its read capability setting), Independent Analytics, Matomo, AnalyticsWP, Rank Math (404 log and analytics) and Gravity Forms' payment add-ons follow their plugins' rules too, and Redirection's logs and 404 records follow its separate log and 404 permissions. A booking list a plugin holds to your own rows (Amelia providers, LatePoint agents, JetBooking vendors) no longer opens in full, nor do the customer and service tables it reads. A plugin's other tables holding the same data follow the list they belong to: entry fields, payments, orders, booking and log meta, notification logs, Wordfence's live traffic and two-factor secrets, and Fluent Forms' and WPForms' queued emails, integrations, payments, drafts and uploads and WP Mail SMTP's mail queue. Where a role may list a plugin's records but not see all of them, the tables holding the hidden part are left out for that role: WooCommerce Gift Cards' full codes and private messages for anyone but an administrator, Gravity SMTP message bodies (password reset and sign-in links) without its preview capability, and JetAppointments' phone numbers, comments and form fields without its appointment-meta access; Minn's own masked lists still work for them. While a Fluent Forms form has a password field whose answers Fluent hides, the tables holding those answers are left out, and a Gravity Forms entry never shows a password answer. Copies of a plugin's tables under any name are left out like the originals, a log whose plugin is inactive, and so cannot say who may read it, is left out too, and the database checks on the System page neither offer to open nor name a table you cannot browse.
- The database browser hides more stored secrets. Formidable's PayPal Connect passwords, Connect verification token and Lite connection id, Sucuri's two-factor backup codes (including the plain copy it keeps for five minutes after making them), the code an email second factor sent, Solid Security's Network Brute Force key, OttoKit's connection secret, WP Statistics' licence and encryption keys, Independent Analytics' salts, SureCart's reCAPTCHA and webhook secrets and a shopper's checkout password hash, CleanTalk's short-lived self-call tokens, and the mail plugins' credentials (FluentSMTP's connections, with the SMTP passwords, API keys and mailbox tokens it can keep unencrypted, and its alert channel tokens, Post SMTP's Microsoft 365 tokens and mobile app keys, SureMails', GoSMTP's and Easy WP SMTP's credentials, and Site Mailer's connection secrets) now show as hidden. A copy of any of them that looks like a key is hidden on every other Minn screen too, and the transients list hides a cached value holding such a copy, wherever the copy sits, instead of printing part of it.
- The revision comparison no longer names another post through an ACF image or file field. An id you may not read, or one that is not an attachment, shows as its number, as ACF's own comparison does.
- Deleting a site, turning a plugin or theme on network-wide and changing network administrators need the network's owner. An account holding those capabilities through the main site's role used to get through, and was refused only after the site was gone or the plugin's activation had run. It is now refused before anything runs, and isn't offered them, and a site's own plugin switch changes a plugin network-wide only for the network's owner.
- The network database upgrade asks for the upgrade right where WordPress does. WordPress counts
upgrade_networkonly on the main site, and Minn counted it on whichever site you were on, so a role a subsite granted could run the upgrade and silence its notice. The route and the notice now ask on the main site. - "Move them to the site default" leaves alone the accounts you may not edit. On a network, a site administrator resetting everyone's palette also reset super admins and members they may not edit, whose palette choice applies across the network. Only accounts you may edit are moved now, and the count says so.
- Remove language keeps every language a reader still uses. It now keeps the languages WPML (hidden languages included), Polylang, TranslatePress, Bogo, qTranslate-XT, WPGlobus, WP Multilang, Falang, Sublanguage, xili-language and Ceceppa Multilingua serve to visitors, on this site or on another site of the network, whose own lists it reads, and the language a site on another network uses through that network's default, and says why on the row. When it cannot read one of those plugins' lists, it keeps every language and names the plugin. Other code that hooks the site's language is named in the confirmation, so you can check it does not use the language you are removing.
- A wp-config switch never flattens a value it does not own. The debug switches judged a constant by any define of it in wp-config.php, then rewrote the first, so a commented-out or second define could turn a private debug log path into the public default, or make the switch edit a comment and report success. A switch now rewrites only the define PHP really runs, and a constant the file defines more than once, inside a condition, below the line that loads WordPress, or in a line that does not take effect is locked with the reason shown. WP-CLI's
if ( ! defined() )fallback still works, a save checks that wp-config.php was written in full and puts the original back if it was not, and the next page load reads the new file right away. - A Pods field save says it worked only once it did. A value Pods does not accept, such as a malformed email address or an emptied required field, ended the whole post save with Pods' own error after the post was stored, so on a new post every retry and autosave made another draft, and other plugins' fields in the same save were skipped. The post now saves once, the editor shows which field was not saved and keeps it unsaved, the fields Pods accepts are saved, and a value Pods refuses is never written another way.
- A dynamic block's preview shows only in that block. A post could hold text made to look like a block preview. When an editor or administrator opened it in Minn, the next dynamic block's preview (as the reviewer sees it, which for some blocks includes their own sign-out link or account details) was drawn into that text, and saving the post stored it there for the post's author to read. A preview now goes only into its own block, and nothing Minn adds to previews (a light or dark mode mark, a missing-image mark) reaches the post's text.
- ACPT boxes kept to certain accounts stay hidden in Minn. A box ACPT shows only to named accounts, or only on posts in a given state, was shown and saved in Minn's editor panel and site options for everyone who could edit the post or open the page. Minn now leaves such a box out wherever ACPT's own screen does.
- ACF relationship and taxonomy fields name only what ACF itself shows. A taxonomy field showed the name of a term from any taxonomy whose number was stored in it, and a relationship or post field with no post type filter accepted and named WordPress's privacy request records, whose title is the requester's email address, so an Editor could list who had asked for their data. Such entries now read as withheld and stay as they are when you save.
- Gravity Forms test sends leave the latest entry alone, and previews show only what Gravity Forms shows. Sending a test notification added a "notification sent" note to the form's latest real entry, even for a form editor allowed only to read entries. Previews and test sends also filled in the submitter's email, role, name and website for that editor. Tests now write no note, and a role that may not list users sees only the submitter's username, as on Gravity Forms' own entry screen.
- WPForms email previews show only what WPForms shows. Previewing a notification filled in the email address and first and last name of the account behind the form's latest entry for anyone who could edit the form, while WPForms' own entry screen shows only that account's display name. Someone who may not list users now sees those tags as placeholders. Administrators still see the address.
- Editing one Contact Form 7 message no longer strips your email templates. For an Editor, or anyone without permission to post unfiltered HTML, saving one message or mail field on the Mail page ran both email bodies and every message through WordPress's HTML filter again. An HTML autoresponder lost its
<style>and<head>, leaving its CSS as visible text, and a "From: [your-name] <[your-email]>" line lost the address. Only what you changed is saved now. - Saving a post keeps a Details, Buttons or Shortcode block you did not edit exactly as written. Every save in Minn rebuilt these blocks from their fields. One written in the block editor lost its inner block markup (the block editor then reported it as invalid), its anchor, colours and bold or italic text, a button's nofollow or sponsored setting, a lock on a Shortcode block and a long shortcode's line breaks. They now save as stored unless you change them; typing into a field and putting it back counts as no change.
- Resending an order email tells you whether it went. "Customer note" in an order's Send WooCommerce email sent nothing yet said it was sent and noted a resend on the order. It now resends the order's latest note to the customer and says so when there is none. Every email answers "sent" and notes it on the order only once WooCommerce has sent it; an order with no address, an email another plugin stops or a mail server that refuses now says so. "New order" can be resent again, as WooCommerce's own order action allows.
- A membership's end date or subscription link changes only when you say how. A request to the end-date or subscription action that left the field out was read as "no end date" (reviving an expired membership) or as "unlink". It is now refused.
- A cancelled JetBooking booking can't be put back over someone else's nights. Moving a cancelled, refunded or unfinished booking back to a confirmed status skipped JetBooking's own availability check, so the unit could be double-booked. The move is now refused while another booking holds those nights.
- A Bookly booking can't be moved back into a full appointment. Bookly refuses a status change that would put more people in an appointment than the service takes, but changing a booking's status through Minn skipped that check, so a direct request could put a cancelled booking back into a full appointment. Such a change is now refused.
- Unticking a taxonomy or feature in a post type or taxonomy says what really happened. A taxonomy that attaches itself (CPT UI's "Attach to post type"), a post type that names a taxonomy in its own settings, a JetEngine type's taxonomies and features added by the theme or a plugin all showed ticked, and unticking them saved nothing while saying "updated". Minn now changes the definition that holds it when you may edit it, and otherwise says where it comes from. Unticking every feature now keeps them all off, and a taxonomy ticked on a Minn type stays attached.
- A JetEngine edit no longer stores a singular label you never typed. Changing anything on a JetEngine post type or taxonomy wrote WordPress's derived or translated singular name into JetEngine's settings, so later plural renames no longer carried it.
- A JetEngine content type item JetEngine could not save is no longer reported as added or saved. When JetEngine refused the write (often after a field was added without updating the type), adding an item reported success and showed item #1 instead, and an edit said "Saved" while nothing changed. Both now say the item was not saved.
- Network settings save all or nothing. An account with network settings rights that isn't a super admin could save a mix of settings and get "not saved" while part of it had saved. The settings only a super admin may change are no longer shown to such an account, and a save that includes one is refused whole. An invalid admin email or choice now refuses the save before anything is written.
- Editing a Safe Redirect Manager rule keeps what you didn't change. A save without the status turned it into 301, a save without the source or target was refused, and a 403, 404 or 410 rule with no target got "/". Untouched fields are now kept, and a status Safe Redirect Manager doesn't know is refused.
- Beaver Builder and Brizy Pro licences follow the vendors' own rules. An administrator whom Beaver Builder's settings capability, or Brizy Pro's white label with the licence tab hidden, keeps off the licence screen could still paste a key or deactivate the licence from Licences. They now see the licence without its buttons.
- A debug switch defined first by another config file shows as defined elsewhere. When wp-config.php loads another file that already sets WP_DEBUG or one of the other switches, System still offered the switch and said "enabled" while the site kept the other file's value. It is now locked as defined elsewhere and the save is refused. Sites whose included file doesn't touch the switches, such as WP Freighter tenants, keep them.
- A Buttons block changed in its settings panel stays changed. The next save of the post quietly put the old block back.
- Hardening. The site language save needs a language. A site's administrators can't read the changelog of a network-only plugin their Plugins screen hides, and no longer see the icon and link of one that isn't active on their site. Minn's guard on user roles and network-owner settings also catches a role or setting name written with trailing spaces.