Freshet Studio Pages Plus

Plugin

Freshet Pages Plus

The gripe

The Pages screen cannot tell me where a page lives, which template renders it, what changed last, or who changed it.

The plugin

Should put those answers in the list table I already use, and add nothing else.

WordPress' admin list tables were built for a blog with forty posts. Freshet Pages Plus makes them work on a site with four hundred pages nested six deep: a sortable Modified column, the URL path under every title, parent and template filters, path search and a Duplicate action, on Pages, Posts and every public custom post type.

It is for the people who look after a site with years of content behind it and a dozen editors on it. There is no settings screen. Each enhancement appears on the screens where it applies and nowhere else, and nothing it does touches the front end.

Free, and the whole plugin

Six additions to the list table, every one of them free. Nothing in the download is locked, limited or time-barred.

A sortable Modified column
Added after the Date column on every post type the plugin touches. Each cell shows the modified date, then a muted second line: the post ID, for when you need it in a query, a shortcode or a support thread; the same timestamp, relative; and the post's author. It is the author, not whoever saved it last, because WordPress does not record the last editor and the column does not pretend to. Sortable on WordPress' native modified ordering, so the page someone touched this morning is one click away on a site with thousands of them. The columns are in the docs.
The full URL path under every title
Not a column: a muted line directly under each title, so three pages called Overview stop being indistinguishable. The path is relative and decoded, /team/andré/ rather than a full URL with percent-escapes. Published and private posts show their real permalink, and the line is a link that opens in a new tab. Drafts, pending and scheduled posts show the pretty path they will get, as plain text, because there is nothing to open yet. The path is collected while the table renders and injected by a small script in the admin footer, so a row that Quick Edit replaces loses its path line until the next reload. The path line is in the docs.
A parent filter and a sortable Parent column
On hierarchical post types only: Pages, and any custom post type registered hierarchical. The column sits after Title and shows the parent's title, linked to that parent's branch view. The filter dropdown lists every page plus a Top level only option, and picking a page shows its whole branch, children and grandchildren all the way down, in the site's own menu order rather than A to Z. A section's third-level pages are the ones you can never find, and one level down would have missed exactly them. Sorting is by parent title, not parent ID, with a self-join so A to Z means A to Z. The branch view is in the docs.
A Template column and filter
Shown only where the active theme registers page templates for that post type; where it does not, there is no column, no filter and nothing to switch off. The column shows the template's human name, linked to a filtered view of everything using it, with a Default template option for pages that have none. When the stored template file no longer exists in the theme, the raw filename is shown instead of a name, which is the quickest way to find pages still pointing at a template a redesign deleted. The filter appends to whatever meta query is already on the screen, so another plugin's filtering keeps working alongside it. The template filter is in the docs.
Path search
The list-table search box does what it always did, and additionally matches the full URL path: a post's own slug plus every ancestor slug. Search pricing and you get every page whose path contains it, wherever it sits. Search about/team and you get that branch. Search a section slug and you get everything beneath it, not just the page whose own slug matches, which is the point on a site where Overview exists eleven times. Spaces are also tried as hyphens. It is added as an OR on top of the normal title and content search, so nothing you could find before stops being findable, and a search in Trash does not start returning published pages. Path search is in the docs.
Duplicate, one at a time or in bulk
A Duplicate row action on every row you can edit, and a Duplicate entry in the Bulk actions dropdown. The row action creates the copy and lands you straight in the editor on it; the bulk action keeps you on the list and reports how many copies actually exist, skipping rows you lack permission on. A copy carries the content, excerpt, parent, menu order, password, comment and ping status, taxonomy terms and post meta. It is a draft, owned by whoever clicked, titled with (Copy) and an empty slug, so it never collides with the original. Meta is copied verbatim; post-ID references inside it are not remapped. What a copy is and is not is in the docs.

Needs WordPress 6.0 and PHP 7.4 or newer. Download it from wordpress.org, or read the source on GitHub. Or Try it in WordPress Playground first: a throwaway site in your browser, the plugin active and a page tree already on the Pages screen. Where each column and filter shows up, what Duplicate copies and the hooks it attaches to are in the Pages Plus docs.

Something not covered here? The FAQ has a Pages Plus section.