The memberships release. WooCommerce Memberships gets the treatment Subscriptions got in August: a members list with the Orders filter bar, each membership and each plan on a page of its own, and the verbs the plugin's own screen offers, shaped by a shop manager's notes on where the work actually happens. WP Freighter tenants join the site switcher the way network sites do. And two contributions from Corey Salzano land as sent: a switch that dresses Minn in wp-admin's fonts for people who live in both, and an ID column on every forms list.
Added
- WooCommerce Memberships gets a Memberships page. Members list with the same filter bar Orders wears (any mix of the seven membership statuses, a date window, a customer, the product that granted access), search by name, email or username, sortable Member since and Expires columns, and a status card that counts active members, paused and pending-cancellation ones, new this month and those ending within thirty days, with a fourteen-day chart of new and cancelled memberships whose bars narrow the list to that day. Opening a member shows the plan, dates, time active, the order and product it came from, profile-field answers, notes newest first and, after a transfer, who held it before. The verbs are the ones the plugin's own screen offers: pause, resume, cancel, set an end date (a past date expires the membership, a future one brings an expired membership back, blank means no end), add a note with an optional email to the member, transfer to another customer, delete, and the same as bulk actions across a selection. Add member grants a plan to an existing customer by hand, refusing a second membership on the same plan the way the plugin's REST does. Clicking a row opens the membership on a page of its own, in the same shape as a product: plan and status pickers, member-since and expiry dates with a save bar that only appears once something changed, the order, product and subscription behind it, notes with a switch to email the note to the member and a delete on each, the member's card with a transfer form, every plan that member holds with an Add a plan control for the ones they do not, their profile answers, and a menu for pause, resume, cancel and delete. Plans can be made and edited in Minn too: the Plans view gains Add plan, Duplicate and Delete, and a row opens the plan on its own page with name, slug, description, how access is granted (by hand, at registration, or by buying chosen products), how long it lasts (unlimited, a set length, or fixed dates), the content and product restriction rules and purchasing discounts as plain lists (what they apply to, which items or terms, when access starts, and for products whether members may view or buy), the sections shown in a member's account, and a members-by-status card. Every save runs the plugin's own plan actions, so a rule kept on the page stays the same rule and a dropped one is removed, and a plan with active members cannot be deleted. A Plans view lists every plan's access method, length, active and all-time member counts, products and rule counts. Everything runs through the plugin's own membership object, so notes, paused intervals, expiry scheduling, member roles and emails stay its doing, and the plugin's own capabilities gate every route (shop managers and administrators; an Editor gets nothing). A customer's card lists every membership the person holds beside their orders and subscriptions, so one page answers what a member has, what they pay for and what they bought. The Plans view counts members per status (active, free trial, expired, cancelled, pending, paused) the way the plugin's own summary does, and both a plan row and the plan page offer View members, which opens the members list narrowed to that plan; the members list takes a plan filter of its own. Where WooCommerce Subscriptions runs, the membership page shows the subscription that controls the membership with its next payment and the last renewal order, since a failed renewal is the usual reason a membership quietly stops, and it can link, move or unlink that subscription the way the Edit Link control on the WooCommerce screen does. Plan authoring, restriction rules, retroactive grants and CSV import and export stay in WooCommerce.
- WP Freighter tenants get the network treatment. On a host running WP Freighter, which serves many sites out of one WordPress install by giving each its own tables, a Tenants group appears in the sidebar with a Tenant sites page: every tenant with its address, how many accounts it has, when it was made, and whether Minn Admin is turned on there, plus a card naming the main site, the files mode and domain mapping, with the WP-CLI prefix for working inside a tenant ready to copy. From a row you can open a tenant in Minn or in WordPress, visit it, turn Minn Admin on or off for it, clone it, rename it or change its hostname, or delete it, and New tenant makes one; every one of those runs through WP Freighter's own site API, so its bootstrap and registry stay its own. A Freighter settings tab edits the files mode and domain mapping. The site switcher beside the site name and the palette list the main site and every tenant, the same as on a network, with one honest difference: tenants share no accounts, so opening one signs you in through WP Freighter's own one-time link, the thing its Log in button does. Inside a tenant the same page offers Back to the main site, and Minn never offers to delete the tenant you are standing in.
- Minn works on a site with plain permalinks. The app itself always opened on such a site (the address is
?minn_admin=1there), but every request it made after that failed: with plain permalinks WordPress serves its REST API from a query string, and Minn was starting a second one, so the overview, every list and every save answered "no route was found". Requests now continue the site's own query string, and a fresh WordPress, which starts with plain permalinks, works in Minn from its first page. - A switch for wp-admin's fonts and styles. On Your profile, beside the other appearance controls, a new switch makes Minn look more like wp-admin for people who live in both: system fonts, 13px type, 40px fields and square corners, with the color schemes unchanged. It is off by default, an administrator can set it on someone else's account the way they set a color scheme, and the front-end Minn bar follows it. Contributed by Corey Salzano.
- Forms and entries show their IDs. Every forms provider's Entries and Forms lists lead with the same ID column Users has, so a number quoted in a support email is one glance away. Contributed by Corey Salzano.
- Plugins can feed the site switcher and rename its group. Two new hooks for hosts that keep several sites in one install without multisite:
minn_admin_sitessupplies the switcher and palette entries (an entry may carry a sign-in route instead of an address, for sites that share no session), andminn_admin_nav_group_labelsrenames the sidebar group. A newfollowaction key lets any surface button end at a URL its route mints per click.
Improved
- The app script starts downloading sooner. The 2 MB script that is Minn's interface was requested only after the inline boot data had parsed; a preload hint in the page head now starts that download alongside the stylesheet, so the first paint after sign-in comes a little earlier on slow connections. Suggested by Corey Salzano.
Fixed
- Membership plans stay inside the plugin's own permissions. A shop manager editing a plan could add, rewrite or remove restriction rules on content types WooCommerce Memberships would not let them touch on its own screen, such as an online course or a forum, and one ordinary save could quietly re-admit free-trial members to content a rule had fenced off from them. Plans now offer only the content types you may edit, carry the rest through read-only, keep the free-trial setting across every save, and publishing a draft plan asks the same permission WooCommerce does. The content picker lists published items only and names only the ones you may read.
- A tenant's sign-in link only goes where the host expects it. On WP Freighter, the one-time administrator link Minn opens into a tenant is built from that tenant's own Site Address, which a tenant's administrator controls, so a tampered address could have sent the host's administrator, and a live sign-in token, to another site. The link is now followed only when it matches the address this install knows the tenant by. A registry entry that points at the main site itself is refused rather than treated as a tenant, so it can never drive a delete or a clone against the main database.
- A one-time plugin setup takes an administrator. Running a plugin's first-time installer from Minn, which creates its database tables, now takes a site administrator by default rather than whatever role could see the list it sits on.
- The System page is a network administrator's on multisite. Its diagnostics, the server and PHP details, the security checks, the debug tools and the backup state, took an ordinary site administrator, which on a network is a single site's owner. They now take a network administrator there, the way WordPress gates Site Health, and are unchanged on a single site.
- Duplicating a post no longer carries settings you could not set yourself. A copy brought across every hidden field and every category and tag regardless of your role, so someone allowed to write drafts could give a copy a page template, page-builder data or search-engine settings, and terms, they could not otherwise apply. A copy now carries only the hidden fields and the terms you could set on it yourself; ordinary fields and the terms you can assign come across as before.
- Building a Duplicator 5.0 package asks for a note, not a name. Duplicator's fifth version names every package it is asked to build, so the name typed into Minn's Build a package form was quietly dropped. The form now asks for a note instead, which Duplicator keeps with the request as the reason it was made. Sites on Duplicator 1.5 still name the package.
- An inactive Brainstorm Force product shows only Turn on. With one Brainstorm Force plugin active, its shared licensing code is loaded for all of them, and the Licenses tab drew Deactivate and Verify beside the Turn on button of products that were not running. Those controls now wait until the product itself is active, the way every other inactive row behaves.
- The Users button on a customer's card goes somewhere. It carried an address from the old hash routing and no click handling, so on a site with pretty permalinks a click only added a fragment to the address bar. It now opens the Users list already searched for that person.
- An appearance saved in the old shape keeps your other choices. A save that still used the original accent-only record reset the Minn bar and default-admin preferences to off, which is how a choice made on Your profile could quietly disappear. Those two preferences now survive whatever shape the rest of the record arrives in.
- Clicking a filter no longer drops the cursor back into the search box. On Extensions and the other lists that keep your cursor in the search field while results refresh, clicking a filter pill after typing put the cursor back into the box once the list repainted, which on a phone brought the keyboard back up. The cursor now goes back only when it was in the box at the moment the list refreshed.
- Opening Minn no longer asks WP Migrate's licensing service anything. Every page load checked whether WP Migrate was licensed by calling the plugin's own check, which contacts its licensing service whenever its cache is thin and then rewrites the stored answer. Minn now reads the answer the plugin already stored and applies the plugin's own rule to it, and the service is contacted only when a migration is actually attempted, by the plugin itself.
- Small permission and safety tidies across the app. Every action that works on one item now reads which item strictly from the address in the page, never from anything the request could also carry, so a confirmation can never name one row while acting on another. Data another plugin stored is read as data only and never allowed to reconstruct an object. The site switcher's entries and the addresses Minn follows are held to the same checks the rest of the app uses, and reporting figures pulled from Matomo are asked for with Minn's own request, not the browser's.
- Status-card buttons wrap on a phone. The action row on a surface's status card, such as "Open Memberships" and "Import / export CSV" above the members list, could not shrink, so on a narrow screen the second button ran off the edge of the card. The row now wraps onto a second line.