Answers to
Questions
The short answers, though. The long ones are in the docs, and the binding ones in the terms.
Billing and licensing
What does a Pro licence cost, and what does it cover?
Freshet Unused Media Pro is EUR 149.00 (about $172), once. That is the total you pay: VAT is included, and your Stripe invoice states the VAT component. A Pro licence is a one-time purchase. It unlocks the Pro features, covers every site you build on, and includes twelve months of updates and support. There is no subscription.
Does it renew?
No. Nothing renews automatically, and there is no subscription to cancel. After twelve months the plugin keeps working exactly as it did. Another year of updates and support is a separate purchase you make only if you want to; if you don't, nothing is charged.
The code is GPL. What am I paying for?
The Pro build of Unused Media, and the service behind it. The build adds four things the free one does not have: the Used view (every place a file is in use, so you can replace rather than remove), WP-CLI scan and list for running the same check across many sites, the evidence report as CSV or JSON, and space totals for what unused files hold and what your deletions have freed. Around that: a licence key for every site you build on, twelve months of automatic updates through the WordPress admin, and support by email. The code itself is GPL, as WordPress requires; that is why the paid build is a download from this site and not a locked feature.
I lost my licence key.
Email email@freshet.studio from the address you paid with. As of yet, there is no account area to log in to.
Can I get a refund?
Yes, within 14 days of first purchase. Email us and you get your money back, no questions asked. The refunded licence is revoked, so the Pro features stop working. The free plugin carries on as before.
Do the free versions on wordpress.org have everything?
Yes. Every plugin on wordpress.org is the complete plugin: nothing in it is locked, limited or time-barred, and only Unused Media has a Pro tier at all. The Pro additions are not in the wordpress.org download. They live in a separate build you download from this site, and the download link arrives with your key.
Unused Media
Is it safe to run on a live site?
It is built to be wrong in one direction only: towards keeping a file. It checks post content, custom fields (ACF included, and ACF blocks where no URL is ever written), featured images, galleries, options and theme mods, widgets, term and user meta, term descriptions, comments and autosaves, plus raw URLs including resized variants and -scaled files.
Ambiguity counts as used: a bare attachment ID in a field the plugin has never seen keeps the file. A reference from a trashed post still counts. Files uploaded in the last 24 hours count as in use, because an editor may still be placing them. And nothing is deleted without a re-verify: every file is scanned again in the instant before it goes, and anything that has become used since the scan is skipped rather than deleted.
A scan deletes nothing by itself. Deletion happens only when you click it, and if you add define( 'MEDIA_TRASH', true ); to wp-config.php first, deleted files go to the media trash instead of being removed for good. Deleting safely is the page to read before you press anything.
What can it not see?
References kept inside a plugin's own database tables: form entries, slider or page-builder records, anything that stores attachment IDs or file URLs in a table of its own. No query-based scanner can find a reference in a table whose shape it has never seen. The same goes for references hard-coded in theme or plugin files, held by an external service, or living on another site of a multisite network. If a plugin on your site does this, check what it holds before deleting, or add a detector of your own through the freshet_unusedmedia_detectors filter. How detection works lists what it reads.
How long does a full scan take?
On a large library, hours rather than minutes. On the library measured for the blog, about 14 seconds per file on a laptop, so a first full pass of 38,797 attachments was an overnight job of around fourteen hours. The scan runs in batches that stop before the PHP time limit and resume from the last completed file, so you can close the tab and pick it up later. Later scans are quick: results are stored per file, and only what has changed is read again. Nothing runs on a schedule.
Which WordPress and PHP versions?
WordPress 6.5 and PHP 8.1 or newer.
Feeds
What does it do?
It shows external feeds inside WordPress: RSS and Atom, YouTube channels, Bluesky profiles, or your own. A provider is one PHP class and one hook, so a hand-rolled feed from any source you can reach renders through the same templates and cache as the built-in ones. Every provider normalises into one item model and renders through templates your theme owns. No vendor styling panels, no iframes, no third-party JavaScript on your pages. Unlimited feeds, and all of it is free. It needs WordPress 6.5 and PHP 8.2 or newer.
Does it slow my site down?
No. Items are cached on your server and a page never waits on a remote API; the one exception is the very first fetch of a brand-new feed. Stale content is served instantly while a background refresh runs, and feed images are stored in your own uploads directory. Visitors' browsers never contact the source platforms.
Why is there no X (Twitter) provider?
X has no free read API and no RSS, and the plugin does not build on scraping. If that changes, a provider gets added.
Can I build templates before I have a live feed?
Yes. The Mock provider comes with a set of realistic sample posts and needs no credentials and no network call. They run through the same normaliser, item model and template chain as live posts, so what you build against them works unchanged once you switch the feed's provider. It is hidden and blocked on sites reporting a production environment type, so fixture posts cannot end up on a live site. Templates & overrides covers the rest.
Pages Plus
Where are the settings?
There are none. Every enhancement appears on the screens where it applies and nowhere else: the sortable Modified column and the URL path under each title on every public post type, the parent filter only on hierarchical ones, the Template column only where the theme registers templates for that post type. Attachments are left alone. It needs WordPress 6.0 and PHP 7.4 or newer.
What does Duplicate copy?
Content, excerpt, parent, menu order, password, comment and ping status, taxonomy terms and post meta. The copy is created as a draft, owned by whoever clicked, titled “… (Copy)”, with an empty slug so it never collides with the original. Comments on the original are not copied. The Duplicate page has the full table.
Does it change the front end?
No. Everything it does happens in wp-admin.
Upload Max
How does it raise the limit?
It writes the real PHP directives where your host reads them: a .user.ini in the WordPress root on FastCGI, PHP-FPM and LiteSpeed, or a php_value block in .htaccess on Apache mod_php. The default is 64 MB. It does not fake the fix by only changing the number WordPress displays, and it checks that the limit actually rose. Deactivating the plugin removes its block and restores the previous limit. It needs WordPress 6.0 and PHP 7.4 or newer.
It says the upload limit is still 2 MB.
PHP caches .user.ini for up to 5 minutes, so give it that long. If it never updates, your WordPress root may not be writable, or your host serves PHP through a handler that reads neither .user.ini nor .htaccess. You get an admin notice in that case.
Can I go higher than 64 MB?
Yes. Set FRESHET_UPLOADMAX_MB in wp-config.php, or as an environment variable, to any value up to 2048. Some hosts impose their own hard ceiling above which nothing in userland can raise it.
The limit went up, but large uploads still fail.
PHP's limit is not the only one in the chain. A web server or proxy in front of PHP, such as nginx's client_max_body_size or a CDN or load balancer body cap, rejects big requests before PHP ever sees them, often as a 413 error, and no plugin can raise or even detect those. Raise the cap in that layer too. Safety & limits has the detail.
Edit Jump
Who loses the admin bar?
Only users who can edit content (the edit_posts capability). Subscribers, customers and members keep the bar and its account links, and logged-out visitors get nothing loaded at all. In its place, Cmd+E on a Mac or Ctrl+E elsewhere jumps to the edit screen of the page you are viewing, with Alt+Shift+E as the fallback when that combination is already taken. It needs WordPress 6.0 and PHP 7.4 or newer.
I need the admin bar back.
Press Cmd/Ctrl+Alt+E to toggle it back on for your browser. The toggle is a cookie, so it lasts 30 days and changes nothing for other users. Or deactivate the plugin.
Nothing happens when I press the shortcut.
Then the page has no edit target for you: an archive, a search result, a 404, or a post you cannot edit. The plugin does not guess. It only jumps where WordPress gives it a real edit URL. If the combination itself is taken by your browser or OS, use Alt+Shift+E.
Not answered here? Email email@freshet.studio. There is one person reading it, and he wrote the plugins.