{"id":377613,"date":"2026-09-29T06:13:47","date_gmt":"2026-09-29T06:13:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/fruti-shortcode-audit\/"},"modified":"2026-09-29T06:16:19","modified_gmt":"2026-09-29T06:16:19","slug":"fruti-shortcode-audit","status":"publish","type":"plugin","link":"https:\/\/pt-ao.wordpress.org\/plugins\/fruti-shortcode-audit\/","author":23575675,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"Fruti Shortcode Audit","header_author":"Fruti Labs","header_description":"Read-only inventory of shortcodes stored in your content, showing which ones no active plugin handles. Never edits, removes or rewrites anything.","assets_banners_color":"0d282f","last_updated":"2026-09-29 06:16:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"frutilabs","date":"2026-09-29 06:16:19","revision":3718362}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3718362,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3718362,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3718362,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3718362,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3718362,"resolution":"1","location":"assets","locale":"","width":1440,"height":1050},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3718362,"resolution":"2","location":"assets","locale":"","width":1440,"height":900}},"screenshots":{"1":"The audit result for one scanned window: distinct shortcode tags found, and how many of them have no active handler.","2":"Both tables: every tag with its state, occurrences and sample post IDs, and the posts that contain shortcodes."}},"plugin_section":[],"plugin_tags":[529,23519,4155,357,3972],"plugin_category":[43,59],"plugin_contributors":[283185],"plugin_business_model":[],"class_list":["post-377613","plugin","type-plugin","status-publish","hentry","plugin_tags-content","plugin_tags-diagnostics","plugin_tags-migration","plugin_tags-shortcodes","plugin_tags-tools","plugin_category-customization","plugin_category-utilities-and-tools","plugin_contributors-frutilabs","plugin_committers-frutilabs"],"banners":{"banner":"https:\/\/ps.w.org\/fruti-shortcode-audit\/assets\/banner-772x250.png?rev=3718362","banner_2x":"https:\/\/ps.w.org\/fruti-shortcode-audit\/assets\/banner-1544x500.png?rev=3718362","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/fruti-shortcode-audit\/assets\/icon-128x128.png?rev=3718362","icon_2x":"https:\/\/ps.w.org\/fruti-shortcode-audit\/assets\/icon-256x256.png?rev=3718362","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/fruti-shortcode-audit\/assets\/screenshot-1.png?rev=3718362","caption":"The audit result for one scanned window: distinct shortcode tags found, and how many of them have no active handler."},{"src":"https:\/\/ps.w.org\/fruti-shortcode-audit\/assets\/screenshot-2.png?rev=3718362","caption":"Both tables: every tag with its state, occurrences and sample post IDs, and the posts that contain shortcodes."}],"raw_content":"<!--section=description-->\n<p>Fruti Shortcode Audit scans your posts and pages and reports:<\/p>\n\n<ul>\n<li>every shortcode tag found in your content, with how often it occurs and how many posts use it;<\/li>\n<li>whether the tag currently has a handler registered on your site, or whether no active plugin\nhandles it any more;<\/li>\n<li>which posts contain shortcodes, with an edit link and a CSV export for the current window.<\/li>\n<\/ul>\n\n<p>It is a diagnostic. It never edits, removes, rewrites or replaces anything, it does not touch your\ncontent, and it writes nothing to your database.<\/p>\n\n<p>Typical use: you are about to delete or replace a plugin that provided shortcodes, or you inherited a\nsite with unknown shortcodes, and you want to see the real footprint before you change anything. A tag\nlabelled \"no active handler\" only means that no plugin registers it right now. It does not mean the\nshortcode text is unused or safe to remove.<\/p>\n\n<p>The scan is bounded and manual: each run processes a configurable number of posts, nothing is loaded\ninto memory in full, and the screen tells you the window that was scanned so you can continue with a\nhigher offset. There is no cron job, no background worker and no queue.<\/p>\n\n<h3>Usage<\/h3>\n\n<ol>\n<li>Open Tools -&gt; Fruti Shortcode Audit.<\/li>\n<li>Leave the defaults (200 posts per run) or lower the window on very large sites.<\/li>\n<li>Press <strong>Run audit<\/strong> and read the two tables: tags found in content, and the posts that use them.<\/li>\n<li>Raise the post offset and run again to cover the rest of the site.<\/li>\n<li>Press <strong>Download CSV for this window<\/strong> to export what you just scanned. The CSV is generated on the\nfly and is never stored.<\/li>\n<\/ol>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP through\nPlugins -&gt; Add New -&gt; Upload Plugin.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to Tools -&gt; Fruti Shortcode Audit and press \"Run audit\".<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20delete%20or%20change%20shortcodes%3F\"><h3>Does this plugin delete or change shortcodes?<\/h3><\/dt>\n<dd><p>No. It is strictly read-only. It never edits post content, never removes shortcode text, and never\nchanges any setting. Removing or converting shortcodes is a decision you make with another tool after\nreading this report, on a backup.<\/p><\/dd>\n<dt id=\"what%20does%20%22no%20active%20handler%22%20mean%3F\"><h3>What does \"no active handler\" mean?<\/h3><\/dt>\n<dd><p>It means no plugin currently registers that tag, so the shortcode would render as plain text. It is\nnot a statement that the content is unused: the plugin that provided it may simply be deactivated, and\nreactivating it would make the tag work again.<\/p><\/dd>\n<dt id=\"does%20it%20scan%20drafts%2C%20revisions%20or%20custom%20post%20types%3F\"><h3>Does it scan drafts, revisions or custom post types?<\/h3><\/dt>\n<dd><p>No. By default it scans published posts and pages. Widening that is out of scope for this version.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20very%20large%20sites%3F\"><h3>What happens on very large sites?<\/h3><\/dt>\n<dd><p>Each run is bounded to the number of posts you choose, and the results show exactly which window was\nscanned. There is no background processing and no automatic scanning of the whole site.<\/p><\/dd>\n<dt id=\"privacy\"><h3>Privacy<\/h3><\/dt>\n<dd><p>Everything runs locally inside your own admin request. Post titles, ids, tags and results are never\nuploaded, never sent to any external service, never logged and never stored in the database. The\nplugin makes no network requests and collects no telemetry.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: bounded read-only shortcode inventory with registered and no-active-handler\nclassification, per-post listing and CSV export for the current window.<\/li>\n<\/ul>","raw_excerpt":"Read-only inventory of the shortcodes stored in your content and of the tags no active plugin currently handles.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/377613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=377613"}],"author":[{"embeddable":true,"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/frutilabs"}],"wp:attachment":[{"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=377613"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=377613"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=377613"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=377613"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=377613"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pt-ao.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=377613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}