{"id":360253,"date":"2026-09-02T13:32:17","date_gmt":"2026-09-02T13:32:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/usageray\/"},"modified":"2026-09-04T20:22:48","modified_gmt":"2026-09-04T20:22:48","slug":"usageray","status":"publish","type":"plugin","link":"https:\/\/es-hn.wordpress.org\/plugins\/usageray\/","author":23556479,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.3.0","stable_tag":"0.3.0","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"UsageRay","header_author":"Dagemawi Alemayehu","header_description":"Find blocks, shortcodes, widgets, and custom post type content that depend on an installed plugin.","assets_banners_color":"2f83b9","last_updated":"2026-09-04 20:22:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":122,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"dagemawi409","date":"2026-09-02 13:32:04","revision":3678091},"0.1.1":{"tag":"0.1.1","author":"dagemawi409","date":"2026-09-02 21:32:33","revision":3678695},"0.1.2":{"tag":"0.1.2","author":"dagemawi409","date":"2026-09-02 22:21:10","revision":3678737},"0.2.0":{"tag":"0.2.0","author":"dagemawi409","date":"2026-09-03 21:55:26","revision":3680445},"0.3.0":{"tag":"0.3.0","author":"dagemawi409","date":"2026-09-04 20:22:48","revision":3681769}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3678737,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3678737,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3678737,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3678737,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3678737,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0","0.1.1","0.1.2","0.2.0","0.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3678737,"resolution":"1","location":"assets","locale":"","width":1710,"height":812},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3678737,"resolution":"2","location":"assets","locale":"","width":1710,"height":812},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3678737,"resolution":"3","location":"assets","locale":"","width":1710,"height":868},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3680445,"resolution":"4","location":"assets","locale":"","width":1710,"height":1250},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3680445,"resolution":"5","location":"assets","locale":"","width":1710,"height":2181},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3680445,"resolution":"6","location":"assets","locale":"","width":1710,"height":1036}},"screenshots":{"1":"Choose any installed plugin and start a read-only usage scan.","2":"Review the evidence summary and open matching content directly from the results.","3":"Start a scan directly from the Find usage link on the Installed Plugins screen.","4":"Audit all installed plugins from one dashboard, then filter and expand the evidence.","5":"Review evidence and risk before deactivating one active plugin.","6":"Review several selected plugins together, including dependency warnings, before WordPress deactivates them."}},"plugin_section":[],"plugin_tags":[4121,3786,276117,357,255756],"plugin_category":[43],"plugin_contributors":[278875],"plugin_business_model":[],"class_list":["post-360253","plugin","type-plugin","status-publish","hentry","plugin_tags-blocks","plugin_tags-cleanup","plugin_tags-plugin-usage","plugin_tags-shortcodes","plugin_tags-unused-plugins","plugin_category-customization","plugin_contributors-dagemawi409","plugin_committers-dagemawi409"],"banners":{"banner":"https:\/\/ps.w.org\/usageray\/assets\/banner-772x250.png?rev=3678737","banner_2x":"https:\/\/ps.w.org\/usageray\/assets\/banner-1544x500.png?rev=3678737","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/usageray\/assets\/icon.svg?rev=3678737","icon":"https:\/\/ps.w.org\/usageray\/assets\/icon.svg?rev=3678737","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/usageray\/assets\/screenshot-1.png?rev=3678737","caption":"Choose any installed plugin and start a read-only usage scan."},{"src":"https:\/\/ps.w.org\/usageray\/assets\/screenshot-2.png?rev=3678737","caption":"Review the evidence summary and open matching content directly from the results."},{"src":"https:\/\/ps.w.org\/usageray\/assets\/screenshot-3.png?rev=3678737","caption":"Start a scan directly from the Find usage link on the Installed Plugins screen."},{"src":"https:\/\/ps.w.org\/usageray\/assets\/screenshot-4.png?rev=3680445","caption":"Audit all installed plugins from one dashboard, then filter and expand the evidence."},{"src":"https:\/\/ps.w.org\/usageray\/assets\/screenshot-5.png?rev=3680445","caption":"Review evidence and risk before deactivating one active plugin."},{"src":"https:\/\/ps.w.org\/usageray\/assets\/screenshot-6.png?rev=3680445","caption":"Review several selected plugins together, including dependency warnings, before WordPress deactivates them."}],"raw_content":"<!--section=description-->\n<p><strong>Know what depends on a plugin before you turn it off.<\/strong><\/p>\n\n<p>UsageRay is a read-only plugin usage and dependency auditor for WordPress administrators, developers, agencies, and maintenance teams. It gathers evidence from content and background systems, explains why each result was attributed to a plugin, and links to matching content when WordPress provides an edit screen.<\/p>\n\n<h4>Audit your entire plugin stack<\/h4>\n\n<p>Run one site-wide audit to review every installed plugin from a single dashboard. UsageRay scans shared content and storage in bounded batches instead of repeating the same work for each plugin. You can monitor progress, cancel safely, resume after a page reload, search the results, filter by evidence status, expand the supporting details, and export the completed audit as CSV or JSON.<\/p>\n\n<h4>Review before deactivation<\/h4>\n\n<p>UsageRay adds a <strong>Find usage<\/strong> action to the Installed Plugins screen. For active plugins, Deactivation Preflight places an evidence and risk review before the normal WordPress deactivation action. It also adds <strong>Review deactivation with UsageRay<\/strong> to the bulk-action menu so several selected plugins can be reviewed together, including declared plugin dependency warnings.<\/p>\n\n<p>Opening a scan or preflight never deactivates anything. Deactivation requires a separate explicit confirmation and is then handled by WordPress's normal protected workflow.<\/p>\n\n<h4>Evidence instead of false certainty<\/h4>\n\n<p>UsageRay separates visible dependency evidence, stored footprint, and uncertainty. An old option, metadata key, empty custom table, or inactive widget is useful cleanup evidence, but it is not treated as proof that the plugin is currently active on the site.<\/p>\n\n<p>An inactive plugin becomes a cleanup candidate only when UsageRay can attribute supported components and finds neither visible usage nor stored footprint. A candidate still requires manual confirmation. <strong>No visible evidence never means safe to delete.<\/strong> Background, security, caching, backup, SEO, and integration plugins may leave no supported content evidence.<\/p>\n\n<h4>What UsageRay checks<\/h4>\n\n<ul>\n<li>Individual plugin deactivation links, with a cautious High, Medium, or Unknown preflight assessment.<\/li>\n<li>Selected-plugin bulk preflights, with separate risks, combined evidence, and declared Requires Plugins relationships.<\/li>\n<li>Gutenberg blocks declared or registered by the selected plugin.<\/li>\n<li>Shortcodes registered by the selected plugin or declared literally in its source.<\/li>\n<li>Active legacy widgets registered by the selected plugin.<\/li>\n<li>Attributable legacy widget options, classified as active, inactive, or orphaned instances without exposing their settings.<\/li>\n<li>Content stored in custom post types declared literally by the selected plugin.<\/li>\n<li>Reusable blocks, Site Editor templates and template parts containing detected blocks or shortcodes.<\/li>\n<li>Classic and block navigation records that reference attributed custom post types.<\/li>\n<li>Recurring and one-time WordPress cron events attributed through registered callbacks or conservative literal scheduling calls. Event arguments are never displayed or exported.<\/li>\n<li>Custom database tables attributed through maintained mappings or conservative literal creation patterns. UsageRay checks existence and COUNT(*) only; row and column values are never read or exported.<\/li>\n<li>Conservative references in the active child and parent themes for attributed blocks, shortcodes, custom post types, and plugin-owned function calls. Only relative filenames and line numbers are retained.<\/li>\n<li>Plugin-associated post metadata keys and generic option names. Generic option values are never read.<\/li>\n<li>Known signals for Elementor, WooCommerce, ACF, Contact Form 7, WPForms, Gravity Forms, Formidable Forms, Ninja Forms, Yoast SEO, Rank Math, All in One SEO, and The Events Calendar.<\/li>\n<\/ul>\n\n<h4>Transparent scan coverage<\/h4>\n\n<p>Every focused scan, site-wide audit, and Deactivation Preflight includes a Scan Coverage manifest. It distinguishes checked surfaces from surfaces that were not applicable, are not yet supported, failed, or were only partially inspected because of a safety limit. This makes the result's limitations visible instead of implying complete detection.<\/p>\n\n<h4>Privacy-conscious and read-only<\/h4>\n\n<p>UsageRay does not modify content, delete plugins, or silently deactivate anything. Generic option values, post metadata values, scheduled-event arguments, custom-table row values, theme source text, and absolute filesystem paths are not retained in results or exports.<\/p>\n\n<p>Use UsageRay when cleaning up an inherited site, replacing a form or page-builder plugin, preparing a client maintenance report, or investigating whether an installed extension still supports content or background behavior.<\/p>\n\n<h4>See UsageRay in action<\/h4>\n\n<p>Watch the short UsageRay overview:<\/p>\n\n<p>https:\/\/www.youtube.com\/watch?v=TWtoWhgtr2w<\/p>\n\n<p>The video narration is AI-generated.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>usageray<\/code> directory to <code>\/wp-content\/plugins\/<\/code> or install the ZIP in WordPress.<\/li>\n<li>Activate UsageRay.<\/li>\n<li>Open Tools &gt; UsageRay, or click \"Find usage\" beside an installed plugin.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20tell%20me%20that%20another%20plugin%20is%20safe%20to%20delete%3F\"><h3>Does this plugin tell me that another plugin is safe to delete?<\/h3><\/dt>\n<dd><p>No. It reports evidence and uncertainty. It never claims that absence of visible usage makes deletion safe.<\/p><\/dd>\n<dt id=\"does%20it%20change%20my%20content%3F\"><h3>Does it change my content?<\/h3><\/dt>\n<dd><p>No. UsageRay is read-only.<\/p><\/dd>\n<dt id=\"does%20usageray%20deactivate%20plugins%20automatically%3F\"><h3>Does UsageRay deactivate plugins automatically?<\/h3><\/dt>\n<dd><p>No. Opening an individual or bulk Deactivation Preflight never changes plugin state. Only after an administrator explicitly confirms does UsageRay submit the reviewed action to WordPress's normal nonce-protected deactivation handler.<\/p><\/dd>\n<dt id=\"how%20do%20i%20review%20several%20plugins%20before%20deactivation%3F\"><h3>How do I review several plugins before deactivation?<\/h3><\/dt>\n<dd><p>On the Installed Plugins screen, select the active plugins, choose \u201cReview deactivation with UsageRay\u201d from Bulk actions, and select Apply. UsageRay scans only that selection and presents a separate risk and evidence panel for every plugin.<\/p><\/dd>\n<dt id=\"can%20i%20stop%20or%20resume%20an%20audit%3F\"><h3>Can I stop or resume an audit?<\/h3><\/dt>\n<dd><p>Yes. You can cancel a site-wide audit or Deactivation Preflight while it is running. If the page reloads during an unfinished audit, UsageRay resumes it automatically. Temporary audit data expires after one hour.<\/p><\/dd>\n<dt id=\"why%20did%20a%20deactivation%20preflight%20open%20immediately%3F\"><h3>Why did a Deactivation Preflight open immediately?<\/h3><\/dt>\n<dd><p>UsageRay reuses a completed preflight for up to 10 minutes when you select Deactivate again for the same plugin. The result says when it was completed and provides a \"Run a fresh preflight\" link.<\/p><\/dd>\n<dt id=\"does%20usageray%20read%20private%20option%20values%3F\"><h3>Does UsageRay read private option values?<\/h3><\/dt>\n<dd><p>Generic option inspection reads option names only. For an attributable legacy widget option, WordPress must decode the option so UsageRay can identify its numeric instance keys. Widget setting values are immediately discarded and are never displayed, retained in results, or exported. Post metadata values are not retained or exported. The ACF adapter performs a database-side field-reference prefix comparison and returns only counts and content locations.<\/p>\n\n<p>For attributable custom tables, UsageRay checks the database catalog and runs COUNT(*) only. It never selects table rows or column values. Empty tables are reported separately from table identifiers that are not currently present.<\/p><\/dd>\n<dt id=\"what%20is%20a%20cleanup%20candidate%3F\"><h3>What is a cleanup candidate?<\/h3><\/dt>\n<dd><p>It is an inactive plugin with attributable supported components, no detected visible usage, and no detected stored footprint. This narrows manual cleanup work; it is not a claim that deletion is safe.<\/p><\/dd>\n<dt id=\"what%20is%20included%20in%20exports%3F\"><h3>What is included in exports?<\/h3><\/dt>\n<dd><p>CSV and JSON exports contain plugin status, cautious guidance, scan coverage and limitations, component names, evidence counts, matching content locations, and edit links. They do not contain post content, metadata values, option values, or filesystem paths.<\/p>\n\n<p>Theme-reference evidence contains only an attributed identifier, relative theme filename, child\/parent role, line number, and an optional Theme File Editor link. Theme source text is never retained or exported.<\/p>\n\n<p>Scheduled-event evidence includes the hook name, recurrence, and next-run time. Event arguments are never included because they may contain private integration data.<\/p><\/dd>\n<dt id=\"can%20it%20inspect%20inactive%20plugins%3F\"><h3>Can it inspect inactive plugins?<\/h3><\/dt>\n<dd><p>It can find literal shortcode and custom post type registrations and block.json metadata in many inactive plugins. Runtime-only or dynamically registered components may require the plugin to be active.<\/p><\/dd>\n<dt id=\"why%20can%20usage%20be%20%22unable%20to%20determine%22%3F\"><h3>Why can usage be \"unable to determine\"?<\/h3><\/dt>\n<dd><p>Some plugins work entirely in the background or register components dynamically. WordPress does not maintain a universal ownership record for all plugin data.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added a versioned Scan Coverage manifest across focused scans, site-wide audits, Deactivation Preflight, JSON, and CSV exports.<\/li>\n<li>Added privacy-safe recurring and one-time WordPress scheduled-event detection without retaining or exporting event arguments.<\/li>\n<li>Added legacy widget storage inspection with active, inactive, and orphaned instance classification.<\/li>\n<li>Added conservative custom-database-table attribution using existence and COUNT(*) checks only; table row and column values are never read.<\/li>\n<li>Added bounded active child and parent theme reference detection for attributed blocks, shortcodes, custom post types, and plugin-owned functions.<\/li>\n<li>Reports theme evidence using relative filenames and line numbers without retaining or exporting source text or absolute paths.<\/li>\n<li>Strengthened shortcode and function matching against comments, declarations, method calls, static calls, malformed patterns, and documentation-only strings.<\/li>\n<li>Improved long-identifier wrapping and narrow-screen evidence-card layouts.<\/li>\n<li>Added upgrade, compatibility, multisite, privacy, false-positive, high-volume, accessibility, and real-plugin stabilization checks.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added a site-wide dashboard that audits all installed plugins together.<\/li>\n<li>Scans each content batch once against components discovered across every plugin.<\/li>\n<li>Added batched progress, cancellation, and automatic resume after page reloads.<\/li>\n<li>Added result summaries, search and status filters, and expandable evidence explanations.<\/li>\n<li>Added reusable block, Site Editor template, navigation, post-metadata, and option-name evidence.<\/li>\n<li>Added conservative adapters for Elementor, WooCommerce, ACF, The Events Calendar, major form plugins, and major SEO plugins.<\/li>\n<li>Added cleanup-candidate guidance that never claims a plugin is safe to remove.<\/li>\n<li>Added administrator-only CSV and JSON audit reports with spreadsheet-formula protection.<\/li>\n<li>Preserved the focused single-plugin scan and read-only safety model.<\/li>\n<li>Added individual Deactivation Preflight with cautious High, Medium, or Unknown risk assessments.<\/li>\n<li>Added \u201cReview deactivation with UsageRay\u201d for selected plugins in the Installed Plugins bulk-action menu.<\/li>\n<li>Added separate risk summaries, combined evidence, and declared Requires Plugins relationship warnings for bulk reviews.<\/li>\n<li>Added focused, resumable preflight scans and 10-minute reuse of recent completed results.<\/li>\n<li>Kept deactivation behind a separate explicit action handled by WordPress's native nonce-protected workflow.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Added a short demonstration video to the plugin page.<\/li>\n<li>Added a third screenshot showing Find usage links on the Installed Plugins screen.<\/li>\n<li>Added a scalable SVG directory icon while retaining PNG fallbacks.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Added a custom icon, banner, and real interface screenshots.<\/li>\n<li>Improved the directory description to explain the plugin's purpose more clearly.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial read-only MVP.<\/li>\n<li>Added block, shortcode, widget, and custom post type evidence scanning.<\/li>\n<li>Added Find usage links to the Installed Plugins screen.<\/li>\n<\/ul>","raw_excerpt":"Find plugin dependencies across content, storage, cron, tables, themes, and integrations before deactivation or replacement.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/360253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=360253"}],"author":[{"embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/dagemawi409"}],"wp:attachment":[{"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=360253"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=360253"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=360253"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=360253"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=360253"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-hn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=360253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}