The safety-net release. Whatever a screen in Minn saves, it can no longer change who runs your site unless your own account could make that change in WordPress: switching plugins on or off, the theme, the admin email, a powerful role, or a more powerful account's login. Adding a user, coupons, customers, new orders and new products each get a page of their own, and plugins White Label CMS hides from your clients leave Minn for them too. The full review of the release candidate found one medium and thirty-two low issues, and three more reviews of the fixes found two medium ACF saves that could lose data and a way for a forms editor to get a password-reset link from a Gravity Forms User Registration preview. All of it is fixed before release, each fix with a test that fails without it.
Added
- Plugins hidden from clients stay hidden in Minn. When White Label CMS hides a plugin's whole menu from your clients, Minn hides the screens it adds for that plugin from the same people: its sidebar item, its ⌘K entries and its doorway on Extensions. A screen several plugins share, like Field Groups, stays while one of them is still in their menu, and a plugin's list still in their menu (Elementor's Templates, say) keeps that one screen. Your White Label CMS Admins still see everything, and Minn's own screens, like the store's Orders and Products, stay. Other menu tools can tell Minn the same through a new filter in the author guide. Pages a shared framework draws for several plugins (Crocoblock's dashboard, Freemius, YITH's panel and others) no longer count as one plugin's, JetSmartFilters' Filters have a screen of their own so hiding JetSearch leaves them, hiding only Flamingo takes just its inbox out of Contact Form 7's screen, a plugin's own settings pages drawn with a framework it bundles (Rank Math's, say) still count as its own, WooCommerce Memberships goes when its Members list is hidden, and the sidebar catches up as soon as a hide changes.
Improved
-
Adding a user is a page of its own. Add user opens a page instead of a dialog, with what WordPress's own Add User screen asks plus a display name and bio. The role starts on the one your site gives new accounts (the dialog always picked Subscriber), a password is generated for you, and WordPress's welcome email, on by default and something the dialog could not send, gives them a link to set their own password, in the language you picked for them. If the site keeps that email from going out, the page says so instead of claiming it was sent. You land on the new account's page.
-
Coupons get a page of their own. Add coupon and every coupon in the list open a full page instead of a dialog, with every setting of WooCommerce's coupon screen: the code (with Generate), the discount, the expiry, spend limits, usage restrictions and limits. Editing a coupon saves only what you changed, so a limit someone else raised meanwhile stays, and clearing a limit or the expiry now saves (the dialog's Clear did nothing). The page lists the orders that used the code, twenty at a time. With everything on the page, the coupon's Edit in WooCommerce link is gone.
-
Customers get a page of their own. A customer on the Customers screen, a subscription or a membership opens a page instead of a dialog: WooCommerce's own order count and total spent, every order a page at a time, their subscriptions and memberships, and their profile and addresses, each with a pencil to edit it. An edit sends only what you changed, so an address the customer updated at checkout meanwhile stays. New order starts an order for them with their details filled in, and an order's Customer card opens the customer.
-
New orders get a page of their own. New order opens a full page in the order page's layout instead of a one-item dialog: several products (a variable product asks which variation), coupons, a shipping charge, the payment method, a customer from your store (whose details fill in) or a guest, the addresses, a note and the starting status. Nothing is saved until you create the order, and WooCommerce works out discounts, tax and the total. If it refuses a coupon, the page tells you why and deletes the draft WooCommerce had started, so no order is left behind. You land on the new order's page.
-
Adding a product to an order or a subscription picks the variation. Choosing a variable product in the items search now lists its variations to pick from, instead of adding the parent product, which is not something a customer can buy.
-
Order totals line up. The totals on an order or subscription sit in the same right-hand column as the items and refunds, instead of beside their labels.
-
New products start on the full product page. Add product on the Products screen, and the new Product item in + New (shown on a WooCommerce store to people who can make products), open the same page you edit products on, so images, pricing, inventory, shipping, attributes, variations and organization are all there from the start. The product is created when you first save it, as a draft unless you pick another status, and a variable product's variations are saved right after it, in the same click.
-
One changelog link per plugin. Plugin cards with an update waiting no longer carry a separate "What's new" link: the version number already opens the same notes. Those notes are whatever the plugin's author publishes, so they may not describe the update on offer, and the window and the right-click menu now call them the Changelog.
-
A safety net under every save. Whatever a screen in Minn saves, it can no longer change who runs your site unless your own account could make that change in WordPress: opening registration or changing the role new accounts get, switching plugins on or off, changing the theme, moving the site's address or its admin email, giving an account a powerful role (Administrator, Editor, Shop Manager) or taking one away, or changing a more powerful account's username, email or password. On a network, a site's administrators can't move their site, change network settings or name a network administrator. Everyday changes go through as before, like WooCommerce Subscriptions making a buyer a Subscriber.
-
A smaller download. The plugin zip now carries only the user guide from the docs folder, the one doc Minn reads, so it is about 2.6 MB instead of 3.5 MB.
-
Code snippets stay readable when code editing is off. On a site that turns off code editing from the dashboard (DISALLOW_FILE_EDIT), a Code Snippets snippet's page showed only Trashed, Lock and Last active. It now shows the name, description, scope, tags and code read-only, as WPCode and FluentSnippets do, and adding, editing and activating stay off.
Fixed
-
Custom fields someone else changed survive your save. Saving a post sent every field of each custom-field panel you had touched (ACF, ACPT, JetEngine, Meta Box, Pods, The Events Calendar, WP Job Manager, Seriously Simple Podcasting and the SEO panel), so a field someone else changed after you opened the post went back to what you had loaded. Minn now sends only the fields you changed, and one you edit while a save is on its way goes with the next save.
-
Plugin edit dialogs keep what you left alone as it is stored now. The edit dialogs on plugin screens (Code Snippets, Redirection and the others with a Save button) read the item again as they save, so a field you didn't touch keeps any change made meanwhile.
-
Minn's own pages save only what you changed. The order, product (and its quick view), membership, membership plan, settings, user and profile pages, shipping zones and widgets send only what you changed, so a change made elsewhere meanwhile stays: saving a note on an order that was paid while it was open used to set it back to Pending payment, saving a product put back a price changed by an import, and saving the Comments settings put back the spam settings and blocked words as the tab had loaded them.
-
Block previews no longer show other people's private posts. A preview of a GenerateBlocks dynamic tag, a GenerateBlocks headline, button, image or container set to show dynamic data, or an Otter dynamic element that named another post by its id showed that post's title, text or custom fields, even when it was a draft, private or trashed post the person writing could not open. For anyone who may not author dynamic content (Contributors and Authors, and Editors on a network), previews in Minn now leave those tags empty, as GenerateBlocks does in WordPress's own block preview, and Otter's show their placeholder text. Administrators and Editors see them resolved as before.
-
Saving a product keeps stock sold while its page was open. A product page or quick view left open while orders came in wrote back the stock count it had loaded on any save, so sold units went back on sale and a product that had sold out could be bought again. The quantity is now sent only when you change it, and if the stock moved since the page opened, Minn leaves it as stored, saves your other changes and tells you the current count, the way WooCommerce's own product screen does. Each variation's stock gets the same check. A variation that shared its parent's stock and is switched to its own keeps the quantity you type, instead of being marked out of stock.
-
A snippet switched off stays off. Saving a snippet's name, code or notes from its details (Header Footer Code Manager, WPCode, Code Snippets, Custom CSS & JS, FluentSnippets) sent back the on/off state the dialog had when it opened, so a snippet switched off in the meantime, by someone else or by WPCode itself after an error, came back on. The edit now leaves the switch to the Activate and Deactivate actions.
-
Gravity SMTP keeps each service's settings apart. Picking another sending service and editing a field (a From address, an API key) in the same save wrote that field into the newly picked service, so one provider's key could end up on another. Switching the service now has to be saved on its own: a save that also changes a field is refused with a message, and once the switch is saved the tab shows the new service's settings.
-
Podcast episode fields you didn't touch stay as they were. Saving any field in the editor's Podcast episode panel (Seriously Simple Podcasting) re-cleaned every other text field on the episode, deleting anything that looked like a percent code (the %Ac in 100%Ac, say) from an iTunes title or file size that went out in the podcast feed. Untouched fields are now left as stored.
-
Event costs keep their backslashes. Saving The Events Calendar's Event details panel dropped backslashes from the cost (and re-cleaned a cost nobody edited). Costs and websites now keep their backslashes, and one you didn't touch is left exactly as stored.
-
Saving the Content settings leaves your permalinks alone. Saving anything on Settings › Content (the default category, say) also resent the permalink settings, which rebuilt the site's rewrite rules and, on a web server WordPress can't identify, put /index.php into every URL. The permalinks now save only when you change them, and a structure you type is stored exactly as typed, as WordPress's own screen stores it. On the main site of a network that uses folders, the /blog prefix WordPress keeps there stays.
-
An order keeps its empty shipping address. Saving an order (its status or a note) copied the billing name into the shipping address when that was empty, so a digital order with nothing to ship gained a shipping name. The billing name now fills in only when you type a shipping address on the order.
-
Theme actions take only real themes. Activating, deleting or network-enabling a theme accepted any folder under the themes directory, including one named with .. (which reached wp-content itself) or a theme's own subfolder, so a role allowed to delete themes could delete far more than a theme. Only a theme WordPress lists is accepted now, broken ones included so they can still be removed.
-
Duplicate stays on content. The Duplicate action worked on WordPress's internal records too, so an Editor could copy a privacy request and read the requester's email address, which only administrators see on the privacy screens. It now works on content types that have a screen of their own, and so do Restore and the editing lock, which let an Editor bring back a privacy request from the trash.
-
New builder pages follow who may create them. Starting a page in a page builder from Minn checked who may edit pages rather than who may create them, which a site can set apart. It now checks the same permission WordPress's own new-page screen does.
-
Session details stay with administrators. A user's sessions list still told a role that may only edit that user (a Shop Manager looking at a customer) when each session expires, which gives the exact sign-in time back, and on a network it showed every session's address and browser to an account holding a network permission through a site's role. Expiry now counts as a detail, and on a network the details go to super admins.
-
Your toolbar choice is private. The Show toolbar setting was readable by anyone through the public list of authors. Now only you and people who can edit your account can read it.
-
WooCommerce logs follow WooCommerce's own rule. System › Logs listed WooCommerce's log files (webhook and payment gateway logs, which carry customer details) to anyone who can open the System page, even a role WooCommerce itself would not show them to. They now need WooCommerce's store-management permission.
-
Duplicating an Elementor template keeps it where it was. Duplicating a library template that carried the floating-buttons type wrote the copy into Elementor's Floating Buttons, which only administrators may create, so a Contributor could put a post there. A copy now always lands in the same place as its original.
-
Editing a content type keeps it hidden if you hid it. Editing a post type or taxonomy kept in Custom Post Type UI or JetEngine (renaming it, say) switched its admin screen back on (and JetEngine's menu entry), undoing a choice the dialog never shows. Those settings are now set only when a type is created.
-
PowerPress episode titles you didn't touch stay as they were. Saving any field in the PowerPress panel rewrote an untouched episode title or subtitle through a text cleaner, so a title like "Episode <3" went out in the podcast feed as "Episode <3". Untouched fields are now compared before cleaning and left as stored.
-
ACF choices keep empty values and labels. Saving a field group in Minn's builder, or editing a field in the Fields view, rewrote choices that had an empty value or an empty label (a "None" option, say) into new choices with stray colons. Choices are now read back with ACF's own reader, and ACPT's field builder, which had the same fault, now reads them the same way.
-
The field group builder won't save over newer changes. With a field group open in Minn's builder (ACF or ACPT), a field someone added in the plugin's own editor, or that an import or an acf-json sync brought in, was deleted by your next save, and a group switched off since came back on. The builder now notices when the group changed after you opened it and asks you to reload instead of saving over it.
-
A membership plan keeps rules added elsewhere. Saving a plan's page in Minn deleted every content, product or discount rule it hadn't loaded, so a rule someone added in WooCommerce Memberships while the page was open disappeared (members-only content could become public, or member pricing vanish). A save now removes only rules you deleted on that page, and a rule someone else changed or removed meanwhile is no longer put back as the page loaded it.
-
Unsaved editor drafts survive a stray link. Opening the sign-in page with ?loggedout=true in the address (which any website can link to) erased the drafts the editor keeps in your browser in case it crashes. They are now cleared only after you actually sign out.
-
The wp-config switches leave custom values alone. On System, the Log to file switch replaced a WP_DEBUG_LOG set to a private file path with a plain on, which moved the log to the public wp-content/debug.log, and any switch replaced a setting written as anything other than a plain true or false. A switch now changes only a plain true or false; anything else shows as locked and stays as written.
-
Form email previews can't hand out a password reset link. With Gravity Forms User Registration active, a preview or test of a notification or confirmation filled in its set-password and activation links for the account behind the form's latest entry, which could be an administrator's, so anyone who could preview a form's emails could take over that account, and making the link cancelled any reset that person had pending. Previews and test emails now leave those tags, and any other add-on's tags, unfilled; real emails are unchanged.
-
Email previews don't reveal the submitter's account data. A Gravity Forms or WPForms email preview (and a Gravity Forms test email) built from the form's latest entry filled in tags that read the submitting account's stored settings, so whoever could preview the email could read any of them, including two-factor seeds and licence keys. Those tags now show as a placeholder in previews and tests, and so do tags that read past the entry in other ways (another post, the page the form was sent from, a custom field, in Gravity Forms, WPForms and Fluent Forms alike); in Gravity Forms the profile details its entry screen already shows still fill in, and real notifications are unchanged. In Gravity Forms that also holds for tags written without a colon or put together from the form's title or your own profile, and for a test email's From, From name and Reply-to; and a Fluent Forms preview no longer runs a ChatGPT feed, which called OpenAI and wrote to the entry.
-
Fluent Forms passwords stay masked. Minn's Fluent Forms entry list, entry page and email preview showed a password answer in full while Fluent still held it (a spam entry it skipped, integrations still queued), where Fluent's own screens show it masked. Minn now masks it the same way.
-
Pods number and price fields keep their values. On a site whose language writes thousands with a dot (German, Spanish, Italian, Dutch and others), or where a field uses the 9.999,99 format, saving any Pods field from the editor's Custom fields panel turned 19.99 into 1,999.00, and every later save multiplied it again. Untouched fields are now left as stored, and a number you type is handed to Pods in the field's own format.
-
A manual UTC offset survives a Settings save. On a site set to a manual offset (UTC+5:30, say) rather than a city, the Site tab showed the timezone as UTC and saved it on every save, so changing the tagline stored UTC and moved every local time on the site. The field now shows the offset as WordPress names it and saves the timezone only when you change it.
-
A language another site uses stays installed. On a network, Languages offered to remove any language this site and its users don't use, but every site shares the same language files, so removing one switched another site that runs in it back to English, and that site's administrator couldn't reinstall it. A language any site on the network uses (sites that follow the network's default included) is now kept and says how many sites use it, and on a network too large to check, nothing is offered for removal.
-
Block commenter is gone; Spam stays. WordPress matches each line of its disallowed list against every later comment's name, email, website, text and IP as a fragment, so a blocked address like x@example.com also trashed comments from anyone whose address contained it (jax@example.com), including people who had never commented before. Minn could only check commenters who already exist, so the right-click Block commenter action is removed. Mark a comment as spam instead; the disallowed list itself is still under Settings › Comments.
-
Update won't install an older version. WordPress remembers an available update for hours. If a theme or plugin was replaced another way in the meantime (a deploy, SFTP, a host's file manager), Minn's Themes tab still offered that remembered update, and clicking Update installed the older release over the newer one and reported success; a plugin deleted that way could be reinstalled. An update now has to be newer than what is installed, and Minn checks again with WordPress.org first when it isn't, as WordPress's own screens do.
-
ACF User fields keep people whose role changed. A User field limited to a role (Reviewers: editors only, say) lost anyone whose role had changed since they were picked whenever you saved any custom field on the post, and ACF then removed the post from their side of a two-way field. Fields you don't touch are now left as stored, and a person already in the field stays when you edit it; the role still applies to people you add.
-
Events with several venues keep them all. With Events Calendar Pro, an event can have more than one venue, but the editor's Event details panel showed only the first and sent it back with any edit, so changing the cost unlinked the others. On an event with several venues the Venue field is now left to the calendar's own screen, as the Organizer field already was for several organizers.
-
Bricks templates without a type or title keep them. A Bricks template with no type (an import of a type this site doesn't offer) opened in Minn with Type set to Header and its empty title filled in as "(no title)", so saving a tag turned it into an empty Header called "(no title)", with its design left where Bricks no longer looked. Both now stay empty unless you change them, and choosing a type for such a template moves its design along, as it does for any other.
-
The database browser hides more credentials, and copies of them. System › Database showed password hashes, reset tokens and API secrets kept in other plugins' own tables and settings (ACPT, LatePoint, Amelia, OttoKit, Freemius, Elementor Connect, WPForms, Formidable and others). Columns named like a password, secret or token are now hidden in every table and can't be sorted or searched, those rows are hidden by name, and any cell holding a copy of a credential the browser hides elsewhere (even encoded, under any name) is hidden too and left out of value searches. To keep that safe, long text columns (a post's content, an option's value) no longer sort, and a value search stops counting at 1,000 matches and says so. Activity logs still show what they recorded, as their own screens do.
-
CleanTalk's access key stays out of view. The spam settings showed the first four characters of CleanTalk's key and the Connectors card its last four to anyone who can change settings, though only someone who may manage plugins can change the key, and on a network a site's key can be the network's, which CleanTalk hides from site administrators. The spam note now just says a key is set, and the card's last four characters show only to people who may manage plugins (super admins on a network), in WordPress's own settings route as well. Akismet's key, whose first four characters the spam card showed too, is no longer named either. On a network, a site administrator's Connectors card no longer offers a key box whose save would be refused, and the spam settings offer a key box only to someone who may save that key.
-
A mistyped Events Calendar key no longer marks the working one invalid. On sites with a persistent object cache (Redis, Memcached), pasting a wrong key for an Events Calendar product (or a key during an outage of their licence server) left the working licence marked invalid for twelve hours, with the calendar's licence warnings, although Minn showed it as fine. A refused key now leaves the recorded status exactly as it was on every site. The same goes for Etch.
-
Renaming a snippet keeps its type. A WPCode or FluentSnippets snippet with no type (one whose type was lost in an import, which therefore never runs) opened in Minn with PHP picked, so renaming it turned it into a PHP snippet; a Novamira memory with no type became a user memory; and a Custom CSS & JS Pro HTML snippet set to desktop or mobile only went back to internal linking on any edit. Each now stays as it was unless you change it, and FluentSnippets, which won't save a snippet without a type and a Run at setting, asks you to pick them.
-
Licence actions follow each plugin's own rules. Minn offered Activate, Deactivate and Re-check for ACF PRO, WPForms, MonsterInsights, ExactMetrics, Gravity Forms and Admin Columns Pro to anyone who can manage settings, even where the plugin itself refuses them: an agency that hides ACF's Updates page from a client's administrators still left that client able to deactivate the agency's ACF PRO licence from Minn. Each now offers them only to the people its own licence screen would, and everyone else sees the licence read-only. The same rule now covers The Events Calendar's add-ons, Gravity SMTP, SearchWP, Smash Balloon's feeds, Kadence Blocks Pro, Essential Addons Pro, Gravity Perks, WP Migrate, CleanTalk and Brainstorm Force's products. So do LayerSlider, Slider Revolution and plugins licensed through Freemius, and on sites where Kadence manages its key in its own licence window, administrators keep their Kadence licence actions.
-
Network screens check permissions where WordPress does. WordPress reads network permissions on the network's main site, so a "network manager" role created on one subsite gives its holder nothing in Network Admin. Minn read them on whichever site the request came from, so that role could list and change the network's sites, accounts and settings from Minn, and make an account a network administrator. Minn now checks on the main site too. Network screens, WP Multi Network's included, also offer only the actions you may run (Add site, Delete site, Delete network, Move site) instead of ones that always fail.
-
With several networks, install-wide tools stay with the main network. On a WordPress install running more than one network (WP Multi Network), the database browser, the logs and the wp-config switches treated any network's super admin as the owner of the whole install, so a secondary network's administrator could read the main network's site and every network's settings and clear the debug log. Those tools now belong to the main network's super admins, and so do backups and migrations (Duplicator, WPvivid, UpdraftPlus, BackWPup, All-in-One WP Migration, Disembark and WP Migrate), which share the one database every network uses.
-
Look-alike blocks in a post can't change other blocks. A writer could put an element in a post (inside a paragraph or a Group) dressed up to look like one of the editor's protected blocks and pointing at another block. When an Editor or Administrator then saved the post in Minn, cut that element, or applied a setting to the Group, Minn copied, rewrote or dropped the other block. The editor now only treats the blocks it drew itself as protected; anything else in the text is saved as the writer's text.
-
Editing a JetSearch suggestion keeps its search count. JetSearch counts every search for a suggestion, and saving a renamed suggestion in Minn put back the count from when you opened it. The count is now saved only when you change it.
-
WP Freighter keeps the rest of its configuration. Changing the files mode or domain mapping from Minn replaced WP Freighter's whole configuration with those two settings. The rest of it now stays.
-
Activating a second copy of Minn switches to it. A zip from GitHub's Code › Download ZIP or a release's Source code link unpacks to minn-admin-main or minn-admin-0.43.0, so WordPress installs it beside an existing minn-admin instead of updating it. Activating that second copy failed with a fatal error, or "activated" while the old copy kept running and every page logged warnings. Activating it now deactivates the old copy and says so, a copy that can't run stays quiet instead of erroring, and Plugins names any other copy that is installed so you can delete it. A copy running from another folder now updates in place, where an update used to replace it and switch Minn off, and deleting the old copy keeps Minn's translations. (GitHub #67)
-
No more deprecation notices on PHP 8.4. On PHP 8.4 and later with debugging on, Minn wrote two "deprecated" notices to the debug log (or the page) on every request. It no longer does.
-
A refused Settings save keeps what you typed. When WordPress refused a save on Settings (an address that isn't an email, say), the tab went back to the stored values and took every edit on it with them. The form now stays as you typed it, ready to correct and save again.
-
Saving a subscription keeps a status changed meanwhile. The subscription page's Save sent the status it had loaded even when you hadn't touched it, so a subscription put on hold by a failed renewal while the page was open came back active. Save now sends the status only when you pick one.
-
Repeater rows stay matched after a save. After you deleted or reordered rows in an ACF repeater and saved with the Custom fields dialog closed, the next edit to a row was merged onto the row that used to sit there, along with whatever that row held that the form doesn't show. Rows are matched to their saved positions after every save now, and rows you change while a save is on its way stay matched to the ones they came from. That includes rows changed while a save that reordered or deleted rows is on its way, and a save waiting behind it. A save that lands after you have moved on to another post, or while a row's gallery is open, no longer touches those rows.
-
Back goes where you came from. A Back trail left by a page you had moved on from without using it (a leave you cancelled, or a membership's link to a product) was picked up by the next page that offers one, so an order opened from the sidebar could offer to go back to a coupon. A trail now lasts only for the page it was left for, and a subscription opened from a customer or a membership goes back there.
-
The database browser covers backup copies and store data. A copy of the user meta table (one made before a migration, say) showed the two-factor seeds and sign-in tokens Minn hides in the live table, and anyone who could open System › Database could read WooCommerce's orders, addresses and database-kept logs even without access to WooCommerce, whose own log screen keeps them out. Copies of WordPress's settings and meta tables are now hidden the same way, WooCommerce's tables are left out for anyone who may not manage WooCommerce, and on a site holding too many credentials to check every cell for copies, long values are held back instead of shown unchecked. Copies are recognised by their name or by their columns (wp_usermeta-bak, or a wp_um_bak with user meta's columns), as are copies of Wordfence's two-factor and settings tables, Search & Filter's settings, OttoKit's webhook log and WooCommerce's tables, and ACF PRO's record of a failed activation, which keeps the licence key, is hidden too. wpDiscuz's own tables, whose names start like WooCommerce's, stay visible to administrators.
-
A refused licence key leaves the working one as it was. Pasting a key that the vendor refused (a typo, or an outage) changed the working licence anyway for several plugins: ACF PRO cleared its status until its next check, Essential Addons Pro showed an invalid-licence notice and paused its own licence checks for an hour, Admin Columns Pro could lose its update permission, and Search & Filter Pro and Smash Balloon's records were rewritten. Each is now put back as it was. HappyFiles, Gravity Forms and CleanTalk change things at their own servers that Minn cannot undo, as their own screens do. Essential Addons Pro's put-back no longer undoes a licence another administrator activated meanwhile.
-
Plugin settings saved from Minn reach the plugin. Antispam Bee read its settings from its own cache entry, so on a site with Redis or Memcached a change saved from Minn ("Keep spam for review", say) showed as saved while Antispam Bee kept the old one; and with Autoptimize active across a network, a save went into a per-site setting Autoptimize never reads while Minn said "Settings saved". Antispam Bee's settings now go through its own writer, and Autoptimize's network-wide settings are refused with a message that they live in Network Admin.
-
Redirection keeps anonymized IP logging. Redirection's IP logging setting showed anonymized logging as plain "on", and a save from Minn switched it to full logging, so the redirect and 404 logs started recording visitors' full addresses. The setting now offers Redirection's three levels and saves the one you pick.
-
Activity Log rows and post type definitions follow their plugins' own rules. Minn showed every Activity Log (Aryo) entry to anyone who can manage settings, administrators' actions included, where Aryo shows each account only what its role covers; and Minn's post type manager let an administrator change or delete types kept in Custom Post Type UI on a site that limits CPT UI to the agency. Both now apply the plugin's own rule. Aryo's rule now holds on versions before 2.14 too.
-
Every screen acts on the item it names. On a dozen plugin screens (Broken Link Checker, Rank Math's redirects, ACF and ACPT options and others), a request could name one item in its address, pass the checks for it, and change another named in its body. Each now acts only on the item in its address. WooCommerce's store settings and shipping zones and Gravity Forms' entry lists now do the same.
-
Event times keep their seconds. Saving any field in the Event details panel moved an event's untouched start and end to the minute (an end at 23:59:59 became 23:59:00), and The Events Calendar recomputed its duration. Dates you didn't change now stay exactly as stored.
-
ACF links keep their addresses. A Link field still holding an address in ACF's older form (a plain URL or a page, as after changing a field to Link) was emptied by any save that wrote its row or group back whole: editing one row of a repeater emptied that link in every row, and a sibling's edit emptied it in an options page group or a nested repeater. Values you didn't touch now stay as stored, and older links are saved in the form ACF's own screen saves them. That includes flexible content that comes from a cloned field.
-
Bulk edits and replies say what was refused. A bulk status or stock change on Products and a reorder of tax rates said everything was saved even when WooCommerce refused part of it (a product deleted in another tab, say), and a reply to a pending comment said the comment was approved when the approval was refused. Each now says what was not saved and why, and refused products stay selected.
-
A new repeater row starts fresh. Adding an ACF repeater row or flexible content section anywhere but the end, or deleting one row and adding another in the same save, gave the new row the stored values of the row that used to sit there for every field you left blank, and your site showed them. A new row now starts at each field's default value, or empty where it has none, as it does in ACF's own screen.
-
ACF fields Minn can't save safely stay in wp-admin. Editing a flexible content field from Minn removed for good any section switched off in ACF and reset renamed section labels, a repeater holding a taxonomy field that saves terms left the post with only the last row's terms, and fields from a seamless clone were saved where ACF doesn't read them. Those fields are now edited in wp-admin only, and Minn says so; the rest of the post saves as usual. That includes an options page in a second language (WPML, Polylang) and flexible content from a seamless clone.
-
List actions and links go where they say. An item whose id held characters like ../ could send a list action (Unlock, Resend and the like) to another address on your site, a link with a hidden tab or line break in it could point off the site, and WP Migrate's requests skipped the checks Minn's own requests make. Each now stays where it says. The editor also opens only real content types, and sends a template's id the way WordPress's own editor does.
-
A plugin update WordPress can't switch back on says why. When WordPress couldn't switch a plugin back on after updating it (a plugin it needs is missing, say), Minn told the administrator that their account couldn't switch plugins on. It now says WordPress refused, with WordPress's reason.
-
Settings you can't save here look locked. Autoptimize's settings on a network that sets them network-wide, and Asset CleanUp's while every one of them is at its default, looked editable while every save was refused. They now show as locked, with the reason, and offer no Save.
-
Times read on your site's clock, in every browser. Times on booking pages and lists, detail rows and post tooltips followed the visitor's browser, so a 9:00 am Amelia visit read 12:00 PM in a browser three hours east while the bookings card's Next used the site's time. They now follow the site's timezone everywhere, across a daylight-saving change too. SureForms, SureMails and Site Mailer showed their times hours off on a site whose database runs in another zone and counted their 14-day charts on the database's calendar, BackWPup's Last run, the Modified times of Elementor templates and FluentSnippets and Scrutoscope's Captured time were hours off, Redirection's Last hit counted from midnight, and a JetBooking check-in read as hours away. Post SMTP, Activity Log, WP Activity Log and All-In-One Security times, JetAppointments slots, Bricks templates and BackWPup's backup-now progress read an hour off for anything from the other half of the year. Each now reads the time as the plugin stores it, and status-card charts keep 14 consecutive days across a daylight-saving change instead of skipping or repeating one.
-
Dates show as dates. WPForms and SureForms entries, LatePoint's registration dialog, Broken Link Checker's link page and mail log details printed raw stamps like 2026-10-09T19:44:00+00:00. They now show a readable date and time on the site's clock.
-
Form entries read the way the form plugin shows them. Gravity Forms rows show a name as one name, a Read or Unread pill that matches the entry page, and a star for starred entries, with new Unread and Starred filters. CFDB7 entries show apostrophes, quotes and slashes as typed instead of
', and a search for them finds them. Fluent Forms, Elementor and WPForms entries no longer offer Mark as read once opening has marked them read, and WPForms offers Mark spam and Trash straight away. Fluent Forms' per-form counts leave out spam and trash, Ninja Forms and Everest Forms entries say Received instead of Published, and no Submission panel repeats a raw status. Ninja Forms, Fluent Forms and WPForms lists sort by when an entry was sent, so an imported one lands in its place, and WPForms and SureForms open on everything received instead of only unread entries. -
Bookings show their notes and their real state. LatePoint's status pills read Payment pending, No show, Checked in and Fully paid instead of raw values, and stay inside their column. LatePoint and Bookly booking pages show the internal note and the customer's comment instead of always saying No notes. JetBooking lists a guest booking under the guest's name and shows its note, and an Amelia booking made on Amelia's own form shows the customer's answers as readable rows instead of raw JSON. A WooCommerce gift card waiting for its delivery date reads Scheduled instead of Disabled, and one the scheduler has sent reads Active. JetReviews shows the product's name as typed and each question's rating, and JetSearch shows the parent suggestion's name instead of its id.
-
Activity logs say who and what. Simple History names who acted when no user did (Anonymous web user, WordPress, WP-CLI) instead of web_user or wp, says how many times a grouped event happened, lists a post's changes one per line with the old and new value, and shows an event's IP address instead of the name it is stored under. Wordfence logins show their action in words, a sign-out reads Signed out instead of Signed in and no longer counts as a successful login, and passkey sign-ins and failures read as what they are. Activity Log's action pills read like the tabs above them, Stream's context and Solid Security's lockout type use the plugins' own words, a Sucuri event shows the address, time and level Sucuri stored, and WP Activity Log shows the username a failed login tried instead of System.
-
Backups, builders and tools show what they hold. Backup dialogs for BackWPup, UpdraftPlus and WPvivid are headed by the backup with the plugin's name under it, say where a set is stored and whether it is locked, and no longer show a raw stamp, a byte count or true, and WPvivid backups of files and database read as both. Novamira lists connected OAuth apps again, every Abilities tab opens after an ability is switched off, no tab appears twice, and Novamira's own tabs come first. The Elementor templates count leaves out the Default Kit as the list does and a Status column marks drafts, OttoKit offers Retry on requests that failed and Rerun on delivered ones, as its own screen does, the 301 Redirects card counts the 404 log current versions keep, Redirection marks disabled rules Inactive, and Scrutoscope shows readable Context and Type labels, real callback counts and which visitors it samples.
-
Novamira switches mean what they say. Abilities that one of Novamira's features owns (Agent Context, the Gutenberg and Design abilities) showed as switches in Minn, and switching one off changed nothing: Novamira kept it callable by connected agents. They now show as locked rows that link to Novamira's Features screen, and a rule Minn 0.44 saved for one of Novamira's own MCP adapter abilities is cleared on the next save.
-
Shared network snippets act on themselves. On a multisite network, a shared network snippet in a site's Code Snippets list opened the site snippet with the same number, and Deactivate or Delete acted on that one instead. It now opens its own read-only view and Deactivate switches it off for that site, and it no longer offers Activate, Delete or Edit, which only work on the site's own snippets, but links to Code Snippets' own screen to switch it on.
-
Search finds what the list shows. Activity Log by Aryo finds an action by the words its pill shows, WP Activity Log finds the username a failed login tried, SureForms and CFDB7 searches find text with apostrophes, quotes and ampersands, and a Site Mailer search finds names with accents or slashes.
-
Labels read the way the plugin writes them. A status label a plugin already wrote keeps its own wording on its pill and its tab instead of being re-cased. Gravity SMTP's suppression reason reads in its own words (Manually Suppressed), WooCommerce Memberships' rule pickers and chips name posts and terms in plain text instead of entities like
‘, SureForms answers and JetReviews titles and messages show ampersands and apostrophes as typed, and a scheduled Elementor template reads Scheduled. -
Lists and dialogs behave while they load. A list waiting on a new filter or tab stays dimmed and out of reach of the keyboard until its new rows arrive, so nothing acts on the old ones. A settings tab that fails to load says so under its tab bar, and the other tabs still open. The media preview is announced as a dialog named by its file. A status stored with underscores reads as words, a recipient written as
Name <address>keeps the address in mail log lists, and Site Mailer recipients show without the quotes and brackets it stores them with. -
A subscription's cards name what they show. The Orders card shows the parent order's status and total and every order's date, and the Customer card names the account instead of showing its user id. Page cards that list rows, like a membership plan's Members, no longer draw a divider under their last row.
-
A site name shows as typed. A site name with an ampersand or apostrophe showed as
&or'in the sidebar. -
Top referrers are back on Koko Analytics 2.x. The Overview's traffic day detail always listed no referrers on Koko Analytics 2.x, which renamed its referrer table.