{"id":380263,"date":"2026-10-07T16:25:18","date_gmt":"2026-10-07T16:25:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/network-usage-auditor\/"},"modified":"2026-10-07T18:47:41","modified_gmt":"2026-10-07T18:47:41","slug":"plugroster-network-audit","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/plugroster-network-audit\/","author":816609,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Plugroster Network Audit","header_author":"","header_description":"Multisite only. Shows which sites use each plugin and theme, and which plugins and themes are unused anywhere on the network.","assets_banners_color":"4d7677","last_updated":"2026-10-07 18:47:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":46,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"joshuatownsend","date":"2026-10-07 18:47:41","revision":3733213}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3733005,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3733005,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3733005,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3733005,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3733213,"resolution":"1","location":"assets","locale":"","width":1280,"height":1532},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3733213,"resolution":"2","location":"assets","locale":"","width":1280,"height":949},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3733213,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3733213,"resolution":"4","location":"assets","locale":"","width":1280,"height":1234},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3733213,"resolution":"5","location":"assets","locale":"","width":1280,"height":1425}},"screenshots":{"1":"Network Admin &gt; Plugins: the \"Active on sites\" column lists the sites using each plugin, archived sites are marked, and a notice lists plugins that sites still use but that are no longer installed.","2":"The Unused filter: plugins nothing on the network uses. An item with an update available suggests deleting it instead of updating.","3":"The Held by inactive sites filter: plugins used only by archived, spam or deleted sites, to review before removing anything.","4":"Network Admin &gt; Themes: the sites using each theme, and which unused-looking themes are parents of child themes in use.","5":"Network Admin &gt; Sites: each site's active plugins and theme, with plugins that are no longer installed marked \"(not installed)\"."}},"plugin_section":[],"plugin_tags":[8533,441,325,2391,1249],"plugin_category":[43,51],"plugin_contributors":[284862],"plugin_business_model":[],"class_list":["post-380263","plugin","type-plugin","status-publish","hentry","plugin_tags-audit","plugin_tags-multisite","plugin_tags-network","plugin_tags-plugins","plugin_tags-themes","plugin_category-customization","plugin_category-multisite","plugin_contributors-joshuatownsend","plugin_committers-joshuatownsend"],"banners":{"banner":"https:\/\/ps.w.org\/plugroster-network-audit\/assets\/banner-772x250.png?rev=3733005","banner_2x":"https:\/\/ps.w.org\/plugroster-network-audit\/assets\/banner-1544x500.png?rev=3733005","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/plugroster-network-audit\/assets\/icon-128x128.png?rev=3733005","icon_2x":"https:\/\/ps.w.org\/plugroster-network-audit\/assets\/icon-256x256.png?rev=3733005","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/plugroster-network-audit\/assets\/screenshot-1.png?rev=3733213","caption":"Network Admin &gt; Plugins: the \"Active on sites\" column lists the sites using each plugin, archived sites are marked, and a notice lists plugins that sites still use but that are no longer installed."},{"src":"https:\/\/ps.w.org\/plugroster-network-audit\/assets\/screenshot-2.png?rev=3733213","caption":"The Unused filter: plugins nothing on the network uses. An item with an update available suggests deleting it instead of updating."},{"src":"https:\/\/ps.w.org\/plugroster-network-audit\/assets\/screenshot-3.png?rev=3733213","caption":"The Held by inactive sites filter: plugins used only by archived, spam or deleted sites, to review before removing anything."},{"src":"https:\/\/ps.w.org\/plugroster-network-audit\/assets\/screenshot-4.png?rev=3733213","caption":"Network Admin &gt; Themes: the sites using each theme, and which unused-looking themes are parents of child themes in use."},{"src":"https:\/\/ps.w.org\/plugroster-network-audit\/assets\/screenshot-5.png?rev=3733213","caption":"Network Admin &gt; Sites: each site's active plugins and theme, with plugins that are no longer installed marked \"(not installed)\"."}],"raw_content":"<!--section=description-->\n<p>Adds columns to the Network Admin Plugins, Themes and Sites screens showing which sites use each plugin and theme, plus two filters on Plugins and Themes so you can safely clean up: \"Unused\" (nothing on the network uses it) and \"Held by inactive sites\" (used only by archived, spam or deleted sites, so not unused, but worth reviewing before you remove anything).<\/p>\n\n<ul>\n<li>Plugins screen: sites each plugin is active on (network-active plugins are flagged).<\/li>\n<li>Themes screen: sites using each theme, and which themes are parents of child themes.<\/li>\n<li>Sites screen: active plugins and theme (with parent\/child) per site.<\/li>\n<li>Site status (archived, spam, deleted) is shown next to each site.<\/li>\n<li>On the Unused list, an item with an update available says so and suggests deleting it instead of updating; on the Held by inactive sites list it says so and suggests updating only if you plan to restore those sites. (It uses the update information WordPress already keeps, and a notice says when WordPress last tried to check: a row without a note may still have an update if that check could not reach wordpress.org.)<\/li>\n<li>Missing from disk: a notice on Plugins and Themes lists plugins and themes that sites still use but that are no longer installed, with the sites affected, and the Sites screen marks them \"(not installed)\". WordPress only cleans these up when each site's own admin screens are opened, so they linger on networks, especially on archived sites.<\/li>\n<li>Export usage as CSV or JSON: one row per site and plugin (marked site or network activation) plus each site's theme.<\/li>\n<li>Built for large networks: usage is indexed once in chunks and kept current automatically.<\/li>\n<\/ul>\n\n<p>Inspired by the original Network Plugin Auditor by Kristen Semel.<\/p>\n\n<h3>Large networks<\/h3>\n\n<p>Usage is stored in a single network option that is rebuilt in short steps and then updated whenever a site changes plugins or themes. Measured in a test network: rebuilding the index for about 900 sites took under 3 seconds in a fresh request (roughly 3 milliseconds per site), the index for 1,000 sites took about 230 KB, and it stayed correct after hundreds of plugin, theme, archive, spam and delete changes. A network of 10,000 sites is expected to need roughly 2 MB and about half a minute for the first build, but has not been tested at that size. Each change rewrites the whole index, so networks where many sites change plugins at the same moment may notice extra database writes.<\/p>\n\n<h3>WP-CLI<\/h3>\n\n<p>Query the audit index from the command line. Build it first with <code>wp plugroster rebuild<\/code>.<\/p>\n\n<ul>\n<li><code>wp plugroster plugin akismet<\/code> lists the sites where a plugin is active (a plugin file or directory name; network-active plugins get a warning).<\/li>\n<li><code>wp plugroster theme twentytwentyfive<\/code> lists the sites using a theme.<\/li>\n<li><code>wp plugroster unused<\/code> lists the plugins and themes nothing uses, with the same rules as the Unused tabs (add <code>--type=themes<\/code> or <code>--type=plugins<\/code> to narrow it).<\/li>\n<li><code>wp plugroster missing<\/code> lists plugins and themes that sites still use but that are no longer installed, with the sites affected.<\/li>\n<li><code>wp plugroster rebuild<\/code> scans every site and rebuilds the index.<\/li>\n<li><p><code>wp plugroster status<\/code> shows when the index was built and whether it is current.<\/p>\n\n<p>plugin and <code>theme<\/code> accept <code>--format=table|csv|json|yaml|ids|count<\/code> and <code>--fields=blog_id,url,name,status<\/code>; <code>unused<\/code> accepts <code>--format=table|csv|json|yaml|count<\/code>. <code>unused<\/code> refuses to answer from an index that is missing or may be out of date.<\/p><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Network Activate.<\/li>\n<li>In Network Admin, click \"Build audit index\" once.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Index writes are batched once per request and the full build works from a fixed list of sites, so it cannot skip a site if sites change mid-build.<\/li>\n<\/ul>","raw_excerpt":"Multisite only. See which sites use each plugin and theme, and find the ones nobody uses.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/380263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=380263"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/joshuatownsend"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=380263"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=380263"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=380263"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=380263"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=380263"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=380263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}