Title: Product Twenty Media Usage
Author: producttwenty
Published: <strong>September 11, 2026</strong>
Last modified: September 11, 2026

---

Search plugins

![](https://ps.w.org/product-twenty-media-usage/assets/banner-772x250.png?rev=3690679)

![](https://ps.w.org/product-twenty-media-usage/assets/icon.svg?rev=3690679)

# Product Twenty Media Usage

 By [producttwenty](https://profiles.wordpress.org/producttwenty/)

[Download](https://downloads.wordpress.org/plugin/product-twenty-media-usage.1.0.0.zip)

 * [Details](https://wordpress.org/plugins/product-twenty-media-usage/#description)
 * [Reviews](https://wordpress.org/plugins/product-twenty-media-usage/#reviews)
 *  [Installation](https://wordpress.org/plugins/product-twenty-media-usage/#installation)
 * [Development](https://wordpress.org/plugins/product-twenty-media-usage/#developers)

 [Support](https://wordpress.org/support/plugin/product-twenty-media-usage/)

## Description

Product Twenty Media Usage builds a local index of image references across
 WordPress
content, metadata, templates, builder data, and relevant site settings.

It adds:

 * In use, Referenced, Needs review, No references found, Protected,
    and Not scanned
   statuses.
 * Usage filters and status badges in the Media Library.
 * Reference details in the attachment view showing where an image was found,
    such
   as Elementor widgets, Divi modules, Uncode Content Blocks, WPBakery elements,
   and ACF fields.
 * A Media Usage dashboard with index health, pending incremental work, recent
    
   index activity, status totals, estimated reclaimable image space, source totals,
   and named skipped-source details.
 * A top-level Media Usage menu with Dashboard and Usage Index screens.
 * Incremental rescans after content, builder data, or image files change.
 * Manual protection for images that should not be considered for cleanup.

The scanner recognizes tested database patterns for normal WordPress blocks
 and
Classic Editor content; media values in Elementor `_elementor_data` and _elementor_page_settings;
media-shaped attributes in WPBakery `[vc_*]`, Uncode `[uncode_*]`, and Divi `[et_pb_*]`
shortcodes; and structured media values stored in Divi `_et_*` post metadata. It
also reads ACF image, gallery, and file fields when their field definitions are 
available, including common ACF Options Page storage. It recognizes attachment IDs,
WordPress image classes, original URLs, resized image URLs, and exact uploads-relative
CDN paths.

Source labels describe where a match was found. They do not claim support for
 every
builder release, every widget, or every theme option screen. Builder formats change
over time. Media Usage reports skipped or unusually complex sources and marks zero-
match images Needs review when scan coverage is incomplete instead of claiming they
have no references.

The dashboard explains why each source was skipped and shows its measured value

and normal safety limit. A separate protected retry processes one named source per
request with higher but still finite limits. Only after every skipped source is 
resolved are affected image statuses repaired in small batches.

The plugin deliberately says “No references found,” not “Unused.” Custom code,
 
external systems, conditional output, and inaccessible resources can contain references
that a database scanner cannot prove do not exist.

Media Usage does not delete files, alter content, contact an external service,
 
or collect telemetry.

## Installation

 1. Upload the `product-twenty-media-usage` folder to `/wp-content/plugins/` or
     install
    the release ZIP.
 2. Activate **Product Twenty Media Usage**.
 3. Open **Media Usage > Dashboard**.
 4. Select **Build usage index**.

The first scan processes existing sites in small, resumable batches. WordPress
 
then keeps the index current as content and supported settings change. Rebuilds 
are created as a separate generation; the last successful index remains active until
the replacement is complete.

Activation does not inspect the filesystem or scan content. Scan requests have
 
short time, memory, traversal, candidate, recursion, and reference-count ceilings.
Oversized or unusually complex sources are skipped with a visible warning instead
of being loaded or processed without a bound. A failed source keeps its previously
saved matches, and transient batch failures receive three bounded retries. Incremental
rescans are paused during imports and replaced by one deduplicated catch-up reconciliation.
Noisy meta such as edit locks is ignored so large editorial sites are not flooded.

Image uploads, file replacements, and regenerated image metadata refresh only
 that
image’s indexed status and known file size. The dashboard shows queued incremental
jobs and retains only the newest 100 source-level activity entries; it does not 
create a per-reference audit log or write scanner logs to disk.

## FAQ

### Does “No references found” mean an image is definitely unused?

No. It means the latest complete scan found no reference in the sources the
 plugin
can inspect. Theme files, custom PHP, remote content, inaccessible pages, or conditional
JavaScript may still use an image.

### Does the plugin delete images?

No. The base plugin is an inspection and classification tool only.

### Why is an image marked “Referenced”?

It was found in a draft, private item, reusable block, saved layout, or builder

template rather than directly in published page content.

### Why is an image with zero references marked “Needs review”?

The latest scan could not inspect at least one source completely, so zero
 references
is not yet a safe cleanup conclusion. Open **Media Usage > Dashboard** to see the
exact skipped source and safety limit. The protected retry checks one skipped source
per request without rerunning the full site.

### Which builders are covered?

The scanner recognizes tested database patterns: media values in Elementor
 _elementor_data
and `_elementor_page_settings`; media-shaped attributes in WPBakery `[vc_*]`, Uncode`[
uncode_*]`, and Divi `[et_pb_*]` shortcodes; and structured media values stored 
in Divi `_et_*` post metadata. Matches are labeled with the detected provider in
the attachment details. This is pattern-specific recognition, not a promise that
every release, widget, or theme option is covered. Because builders change, a full
reconciliation is scheduled 30 days after each successful scan. Installing the plugin
does not start or schedule the first scan.

### What custom fields are supported?

URL-based references in post metadata are inspected generally. ACF image,
 gallery,
and file fields receive dedicated attachment-ID handling when their field definitions
are available. Developers can declare other ID-based custom post-meta fields through`
product_twenty_media_usage_is_media_meta_field`, and ID-based values in relevant
site options through product_twenty_media_usage_is_media_option. Arbitrary numeric
custom fields are not assumed to be image IDs because doing so would create false
matches.

### Does scanning send site data anywhere?

No. Scanning and storage remain inside the WordPress installation.

### What happens on uninstall?

The relationship index, scan state, statuses, and manual protection flags are
 removed.
Media files and site content are not modified.

### Does it work with multisite?

The plugin can be activated on an individual site. Network-wide activation and
 
network-level reporting have not been declared or tested.

### Is this the base for a future Pro version?

Yes. This plugin is the canonical, independently useful base. Product Twenty
 Media
Usage Pro is a separate optional companion using the documented extension API. The
base contains no locked controls or licensing requests.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Product Twenty Media Usage” is open source software. The following people have 
contributed to this plugin.

Contributors

 *   [ producttwenty ](https://profiles.wordpress.org/producttwenty/)

[Translate “Product Twenty Media Usage” into your language.](https://translate.wordpress.org/projects/wp-plugins/product-twenty-media-usage)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/product-twenty-media-usage/),
check out the [SVN repository](https://plugins.svn.wordpress.org/product-twenty-media-usage/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/product-twenty-media-usage/)
by [RSS](https://plugins.trac.wordpress.org/log/product-twenty-media-usage/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0

 * Initial public release.

## Meta

 *  Version **1.0.0**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.6 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [attachments](https://wordpress.org/plugins/tags/attachments/)[images](https://wordpress.org/plugins/tags/images/)
   [media](https://wordpress.org/plugins/tags/media/)[media library](https://wordpress.org/plugins/tags/media-library/)
   [unused images](https://wordpress.org/plugins/tags/unused-images/)
 *  [Advanced View](https://wordpress.org/plugins/product-twenty-media-usage/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/product-twenty-media-usage/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/product-twenty-media-usage/reviews/)

## Contributors

 *   [ producttwenty ](https://profiles.wordpress.org/producttwenty/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/product-twenty-media-usage/)