Added
-
Taxonomies manager: The Post Types view gains a Taxonomies tab — every registered taxonomy with its attachments, term counts and owner, editable through the same storage adapters as post types (ACF
acf-taxonomydefinitions via ACF's own API, Custom Post Type UI's option, or Minn's own store). Create (hierarchical or flat, choose the backend), re-attach to any post types, or remove — terms always stay in the database, and ACF deletions trash recoverably. Core and code-registered taxonomies are read-only. The Post Types modal's taxonomy checkboxes are now dynamic — every assignable taxonomy, not just Categories/Tags. -
Create redirects (and search them): The Redirects surface gains an Add redirect button — a form for source, target and HTTP status that writes through Redirection's own API — plus a filter box that searches by source URL server-side. Both come from two new generic surface capabilities (
createandsearch), so any adapter can opt in. -
Tidier surface tables: Columns take an explicit
widthand anumformat (right-aligned, tabular); text cells truncate to one line with an ellipsis instead of wrapping long URLs to three rows, and empty/zero timestamps read "—" rather than "Invalid Date". Redirects now fit source, monospace target, code, hits and last-hit cleanly on one row. -
More redirect plugins: Drop-in adapters for Safe Redirect Manager and Simple 301 Redirects — list, search, create and delete, each shimmed over the plugin's own storage (SRM's
srm_*functions; the301_redirectsoption) since neither exposes REST. -
Image controls: Clicking an image in the editor opens a popover — alt text, caption (created, updated or removed, wrapping bare images in the standard figure), Replace via the media picker, and Remove. Replacing keeps the block honest: the
{"id":…}attribute andwp-image-Nclass follow the new attachment, and stalesrcset/sizes/dimensions are dropped. -
Video & audio blocks:
core/videoandcore/audiojoin the editable set via attribute passthrough — no longer islands. -
Query Monitor support: With QM active, Minn's pages get the full Query Monitor experience — a floating summary chip (time · memory · query time · query count) that opens the real QM panel, covering the Minn document request. The integration is a bundled adapter plus
minn_admin_template_footer, the one hook Minn's standalone document now fires (deliberately not wp_footer — no third-party injection). Capability checks stay QM's own: users withoutview_query_monitorget zero QM bytes. -
Attribute passthrough for simple blocks: Images, tables, quotes, separators, verse and preformatted blocks that carry attributes (
{"id":…,"sizeSlug":…}images, styled tables/quotes/separators) are now fully editable instead of islanded — the comment attributes are parked on the element and re-emitted byte-faithfully on save, with Gutenberg's comment-safe escaping. The class-derivedhasFixedLayoutrespects explicitly-writtenfalse(newer Gutenberg defaults tables to fixed). Only non-text-flow blocks participate, so contenteditable splits can never duplicate attributes. Cosmetic note: void elements serialize as<img …>rather than<img …/>(HTML-equivalent). -
Activity chart drill-down: The Overview's activity bars are clickable — a modal lists the events behind the bar (posts and pages published, comments received in that day or week), each row linking to the editor or the Comments view. The overview endpoint now stamps each chart bucket with its GMT bounds, and a new
overview/activityendpoint returns the events for a window. -
Trash: The Content view gains a Trash toggle — see trashed posts, pages and custom post types, restore them (a new
posts/{id}/restoreendpoint; core REST has no untrash) or delete them permanently, singly or in bulk. Authors see only their own trashed items, matching wp-admin. -
Menus: A full navigation manager for classic themes (block themes keep the site editor, matching wp-admin) — every menu as a tab, items in their real hierarchy with reorder/indent/outdent controls, inline label and URL editing, add pages/posts via a searchable picker or custom links, theme-location assignment via combobox, and create/rename/delete menus. All through core's
wp/v2/menus,menu-itemsandmenu-locationsREST — reordering renumbers the whole tree and writes only the items whose order or parent actually changed. -
Widgets: Classic widget areas as cards — reorder within an area, move between areas, delete, and edit block, text and HTML widgets in place (other widget types keep their settings and can still be arranged). Adding drops in a block widget and opens the editor. Widgets are created and then assigned to their area in a second request — creating straight into a sidebar gets silently swept to inactive by the same request's
retrieve_widgets()pass (core #53657 territory). -
Page attributes in the editor: Pages (and hierarchical post types) get a Page attributes card — a parent picker showing the page tree with the post's own descendants excluded, a template combobox (a new
templatesendpoint exposes the theme's classicTemplate Name:templates, which core REST validates against but never lists), and a menu order field. Everything rides the normal autosave. The card appears only when the post type actually supports something: posts see nothing unless the theme registers post templates. -
New menu: The + New button opens a Post / Page choice (page authors only — everyone else goes straight to a new post), and the ⌘K palette gains "Create new page". New pages get the full Page attributes card before first save, so parent and template can be set as you write.
-
Embeds: Paste a lone YouTube / Vimeo / TikTok / Spotify / X link (any of fifteen core oEmbed hosts) into an empty block and it becomes a
core/embedisland; the slash menu gains an Embed command that takes any URL. The markup is Gutenberg-byte-faithful (verified with aparse_blocks/serialize_blocksidentity round-trip), so the block opens natively in the block editor. URLs inside sentences still paste as plain text, and classic-mode content keeps relying on WP's own autoembed. -
Galleries: A Gallery slash command opens the media picker in multi-select — pick images in order (or upload straight into the selection) and insert a modern nested-image
core/galleryas an island, rendered in place. Editing an existing gallery still hands off to the block editor; creating one no longer does. -
Core WordPress updates: When a core update is on offer, Extensions leads with an update banner — one click runs the same
Core_Upgraderpath as wp-admin (maintenance mode, rollback protection), then triggers the database migration step over loopback. Update notifications now land on Extensions instead of bouncing to wp-admin. Gated onupdate_core. -
Minn as the default admin: A new General setting — after signing in, users who can use Minn land at
/minn-admin/instead of the wp-admin dashboard. Explicitredirect_todeep links (a plugin page, a specific post) still go where they intended, users withoutedit_postskeep core behavior, and classic wp-admin stays fully reachable. -
Comment replies: Answer comments without leaving Minn — a Reply box on every pending and approved comment, posting as you. Replying to a pending comment approves it, matching wp-admin.
-
Media search & filters: The library gains a search box and type tabs (Images / Video / Audio / Docs) — server-side via the media endpoint's own
searchandmedia_typeparams, so it scales past the 48-per-page window. -
Excerpt: Posts (and CPTs with excerpt support) get an Excerpt field in the editor's Settings card, riding the normal autosave.
-
Your profile: The sidebar account area (and a new ⌘K entry) opens your own profile for any role — display name, email and password, with the role shown read-only when you can't change it. Non-admins finally get a way to update their password without wp-admin; the page reloads after a self password change since the session token (and REST nonce) rotates. A self display-name edit updates the sidebar immediately.
Improved
- Real pagination: Every list view — Content, Media, Comments, Orders, Users and all adapter surfaces — replaces the append-only "Load more" button with numbered pagination (‹ 1 … 4 5 6 … 20 ›) plus a "page X of Y" count, jumping back to the top on page change. Content's type tabs now filter server-side (each tab is its own query instead of a client-side sieve over merged pages), which also makes them accurate on large sites. The wp.org install dialogs keep "Load more", where appending suits browsing.
- Editor says what it's editing: The topbar pill reads "New page" / "Post · Published" instead of a bare status, and the title placeholder follows suit ("Untitled page") — a blank new page and a blank new post are no longer indistinguishable.
- Add-plugin dialog: wp.org search results paginate — a "Load more" row appends the next page (with the running count of 2,500-odd results) instead of stopping at twelve, keeping your scroll position instead of snapping back to the top. Plugin-name cleanup handles more tagline junk: attached colons ("UpdraftPlus: WP Backup & Migration Plugin"), sentence periods ("CleanTalk Anti-Spam. Spam Firewall…"), comma lists ("SmartCrawl SEO checker, analyzer & optimizer") and "by Vendor" suffixes — the vendor only comes off when a multi-word name remains, so "Login by Auth0" survives while "GEO Plugin by Squirrly SEO" trims. The untouched full name stays as the row's tooltip, and the same cleanup already runs across the Extensions list.
- Swappable overview chart: When an analytics adapter provides traffic, the chart no longer hides the Activity view — a ⇄ button in the chart header swaps between Traffic and Activity (with its clickable drill-down bars), and the choice sticks across visits. Recent activity trims to four entries so the two dashboard cards line up.
- Searchable Forms and Activity Log: The Gravity Forms surface gains a filter box that searches every field of every entry (per-form tabs included), and Simple History's Activity Log gets free-text event search — both server-side through each plugin's own REST API. Gravity Forms takes its search criteria as a JSON string, so the generic surface
searchcapability now accepts a JSON-criteria form alongside the plain{q}query template — any adapter can use either. - Revision authors: The editor's History card now shows who made each revision. (Revisions expose an author ID but no embeddable link, so names resolve through the users endpoint — the previous
_embedapproach could never work.) - Tag autocomplete: The editor's tag input uses the combobox — click to browse existing tags with usage counts, arrow/click to pick; plain Enter still creates exactly what you typed as a new tag.
- Site icon as favicon: Minn's pages now use the site icon (settable from Minn's own Settings) as their favicon when one exists.
Fixed
- Stale content loads: A content request still in flight when the filter context changes (trash toggled, search typed, taxonomy picked) is now discarded instead of landing rows from the old context into the new view — which in trash mode could have decorated live posts with Restore/Delete-permanently buttons.