{"id":256747,"date":"2025-11-12T01:04:09","date_gmt":"2025-11-12T01:04:09","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/static-cache-generator\/"},"modified":"2026-03-19T23:32:12","modified_gmt":"2026-03-19T23:32:12","slug":"static-cache-wrangler","status":"publish","type":"plugin","link":"https:\/\/fa-af.wordpress.org\/plugins\/static-cache-wrangler\/","author":471609,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.1.6","stable_tag":"2.1.6","tested":"6.9.4","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Static Cache Wrangler","header_author":"Derick Schaefer","header_description":"Generate static HTML files with fully local CSS\/JS\/Images\/Fonts","assets_banners_color":"ffffff","last_updated":"2026-03-19 23:32:12","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/moderncli.dev\/code\/static-cache-wrangler\/","header_author_uri":"https:\/\/moderncli.dev\/author\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":569,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.6":{"tag":"2.0.6","author":"derickschaefer","date":"2025-11-24 03:04:25"},"2.0.7":{"tag":"2.0.7","author":"derickschaefer","date":"2025-11-28 02:05:17"},"2.1.0":{"tag":"2.1.0","author":"derickschaefer","date":"2025-12-02 20:35:55"},"2.1.1":{"tag":"2.1.1","author":"derickschaefer","date":"2025-12-05 04:01:51"},"2.1.2":{"tag":"2.1.2","author":"derickschaefer","date":"2025-12-16 03:23:45"},"2.1.3":{"tag":"2.1.3","author":"derickschaefer","date":"2025-12-22 15:47:15"},"2.1.4":{"tag":"2.1.4","author":"derickschaefer","date":"2026-01-07 22:27:15"},"2.1.5":{"tag":"2.1.5","author":"derickschaefer","date":"2026-03-01 13:22:08"},"2.1.6":{"tag":"2.1.6","author":"derickschaefer","date":"2026-03-19 23:32:12"}},"upgrade_notice":{"2.1.5":"<p>Fixes asset processing reliability and ZIP packaging behavior. Recommended update for all users.<\/p>","2.1.4":"<p>Adds WordPress metadata injection to cached HTML files for improved headless CMS migration support. Backward compatible.<\/p>","2.0.6":"<p>Change all standard template variables to include the prefix stcw_ for WordPress.Org WordPress.NamingConventions.PrefixAllGlobals compliance.<\/p>","2.0.5":"<p>Enhanced multisite support with isolated directories per site. Storage moved to wp-content\/cache\/stcw_static\/ with unique namespace. Fully backward compatible for new installs. WordPress.org compliant.<\/p>","2.0.4":"<p>Major compliance update. Plugin renamed to Static Cache Wrangler. Clear old plugin before installing. All prefixes changed from SCG to STCW. No data migration needed as plugin not yet published.<\/p>","2.0.3":"<p>WordPress.org compliance. All prefixes changed to STCW (4+ characters). Clear and regenerate static files after update. WP-CLI commands unchanged.<\/p>","2.0":"<p>Major rewrite with modern standards, WP_Filesystem support, and enhanced security. Recommended for all users.<\/p>\n\n<hr \/>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3393951,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3393951,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3393959,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.6","2.0.7","2.1.0","2.1.1","2.1.2","2.1.3","2.1.4","2.1.5","2.1.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3393951,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3393951,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3393951,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3393951,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3393951,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"Card-based dashboard showing generation status and stats","2":"Admin bar actions and stats","3":"Background asset queue with progress indicator","4":"Paused status with ability to resume"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[146,229492,250566,250569,57011],"plugin_category":[54,59],"plugin_contributors":[84986],"plugin_business_model":[],"class_list":["post-256747","plugin","type-plugin","status-publish","hentry","plugin_tags-cache","plugin_tags-html-export","plugin_tags-static-site","plugin_tags-static-site-export","plugin_tags-static-site-generator","plugin_category-security-and-spam-protection","plugin_category-utilities-and-tools","plugin_contributors-derickschaefer","plugin_committers-derickschaefer"],"banners":{"banner":"https:\/\/ps.w.org\/static-cache-wrangler\/assets\/banner-772x250.png?rev=3393959","banner_2x":"https:\/\/ps.w.org\/static-cache-wrangler\/assets\/banner-1544x500.png?rev=3393951","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/static-cache-wrangler\/assets\/icon-256x256.png?rev=3393951","icon_2x":"https:\/\/ps.w.org\/static-cache-wrangler\/assets\/icon-256x256.png?rev=3393951","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/static-cache-wrangler\/assets\/screenshot-1.png?rev=3393951","caption":"Card-based dashboard showing generation status and stats"},{"src":"https:\/\/ps.w.org\/static-cache-wrangler\/assets\/screenshot-2.png?rev=3393951","caption":"Admin bar actions and stats"},{"src":"https:\/\/ps.w.org\/static-cache-wrangler\/assets\/screenshot-3.png?rev=3393951","caption":"Background asset queue with progress indicator"},{"src":"https:\/\/ps.w.org\/static-cache-wrangler\/assets\/screenshot-4.png?rev=3393951","caption":"Paused status with ability to resume"},{"src":"https:\/\/ps.w.org\/static-cache-wrangler\/assets\/screenshot-5.png?rev=3393951","caption":""}],"raw_content":"<!--section=description-->\n<p><strong><em>Static Cache Wrangler<\/em><\/strong> is a lightweight, low\u2011resource <em>static site generator<\/em> and <em>HTML export engine<\/em> for WordPress. It automatically creates <strong><em>self\u2011contained, URL\u2011agnostic static pages<\/em><\/strong> of your site \u2014 perfect for anyone who needs to <strong><em>preserve, distribute, or accelerate WordPress content<\/em><\/strong>.<\/p>\n\n<p>Originally developed as a command\u2011line tool for <strong><em>WP\u2011CLI<\/em><\/strong>, it has evolved into composable, zero\u2011impact tooling that supports administrators, developers, and site owners alike. Whether you're archiving a client project, deploying to a CDN, or creating a portable offline version that runs anywhere, Static Cache Wrangler delivers fast, CDN\u2011ready HTML output without complex setup.<\/p>\n\n<p>Technically, the plugin uses an <em>asynchronous, lazy\u2011loading build mechanism<\/em> that generates static pages as visitors browse your site. Over time, your entire site is exported as lightweight static HTML.<br \/>\nFree companion plugin <a href=\"https:\/\/wordpress.org\/plugins\/stcw-coverage-assistant\/\">STCW Coverage Assistant<\/a> adds real\u2011time build monitoring and manually triggered full\u2011site generation for any uncached pages.<\/p>\n\n<p>Unlike traditional static\u2011site plugins that require full crawls or database schema changes, <strong><em>Static Cache Wrangler is zero\u2011impact<\/em><\/strong>:\n* Does <strong>not<\/strong> add custom database tables or modify your schema<br \/>\n* Automatically cleans up all plugin options, cron jobs, and transients upon uninstall<br \/>\n* Keeps your WordPress database completely untouched<br \/>\n* Runs all caching processes <strong>asynchronously<\/strong> in the background<br \/>\n* Offers an optional <strong>performance profiler<\/strong> for granular resource and execution insights<\/p>\n\n<p><strong><em>Perfect for:<\/em><\/strong>\n* Creating fully offline or portable copies of WordPress sites<br \/>\n* Rsyncing to read\u2011only Nginx failover servers for high availability<br \/>\n* Publishing WordPress content to Amazon\u202fS3\u00ae, Netlify\u00ae, or other static CDNs<br \/>\n* Geo\u2011distributing static HTML for ultra\u2011fast global reads<br \/>\n* Archiving, demos, and secure client deliverables<br \/>\n* Small to mid\u2011sized sites (\u2248\u202f100\u202fpages\u202f+) \u2014 upcoming assistant plugin expands this to 1\u202fK\u202fpages<br \/>\n* Multisite administrators needing scalable static\u2011cache exports<\/p>\n\n<p>A demo site created using this plugin can be found at <a href=\"https:\/\/static.cachewrangler.com\/\">Cache Wrangler Demo Site<\/a> which is a static version of this <a href=\"https:\/\/cacherangler.com\/\">WordPress site<\/a><\/p>\n\n<p><strong><em>Static Cache Wrangler<\/em><\/strong> turns WordPress into a fast, secure, and portable static\u2011site generator \u2014 with <strong>no database changes<\/strong>, <strong>no vendor lock\u2011in<\/strong>, and <strong>no maintenance overhead<\/strong>.<\/p>\n\n<p><strong>Detailed Testing and Profiling:<\/strong>\n* Triggering of page rendering requires 1-2MB of PHP memory for the duration of the process.\n* Average processing duration is less than 500 ms (meaning memory consumption is quickly released)\n* Average asset (JS, CSS, image) batch processing is less than 100 ms\n* WordPress Core and theme rendering is generally 20-25 MB; SCW usage keeps total memory below 30 MB\n* CLI commands are even more efficient<\/p>\n\n<p><strong>Funding Model<\/strong>\n* This plugin and all companion plugins will remain 100% free (true WordPress style)\n* Want to make a donation? Consider purchasing a copy of the author's book on command-line interfaces for yourself or as a gift.<\/p>\n\n<p><a href=\"https:\/\/moderncli.dev\">Modern CLI Book<\/a><\/p>\n\n\n\n<h3>How It Works<\/h3>\n\n<ol>\n<li>Enable static site generation using the toggle in the sidebar.  <\/li>\n<li>As users browse your site normally, each page visit creates a static HTML file.  <\/li>\n<li>Assets (CSS, JS, images, fonts) are automatically are queued and asyncronously downloaded and localized.  <\/li>\n<li>Processing happens in the background and can be paused anytime.  <\/li>\n<li>Use free companion plugin to monitor and accelerate cache creation <a href=\"https:\/\/wordpress.org\/plugins\/stcw-coverage-assistant\/\">STCW Coverage Assistant<\/a><\/li>\n<li>Download the complete static site as a ZIP file.  <\/li>\n<li>Extract and open <code>index.html<\/code> in any browser \u2014 it works completely offline.<\/li>\n<\/ol>\n\n\n\n<h3>Key Features<\/h3>\n\n<p><strong>What's New in 2.1.6:<\/strong><\/p>\n\n<h4>2.1.6<\/h4>\n\n<p>Version 2.1.6 Adds ghost file protection for environments where PHP memory based failures cause the HTML generation process to fail rendering blank HTML files.<\/p>\n\n<p><strong>What's New in 2.1.5:<\/strong><\/p>\n\n<h4>2.1.5<\/h4>\n\n<p>Version 2.1.5 fixes auto asset processing script loading, ensures <code>STCW_ASYNC_ASSETS<\/code> false mode processes assets immediately, prevents endless retries for failed asset downloads, and removes duplicate assets in ZIP exports.<\/p>\n\n<p><strong>What's Fixed in 2.1.3:<\/strong><\/p>\n\n<h4>2.1.3<\/h4>\n\n<p>Version 2.1.3 fixes errantly cached files and directories related to index.php and admin in URLs.<\/p>\n\n<p><strong>What's New in 2.1.2:<\/strong><\/p>\n\n<h4>2.1.2<\/h4>\n\n<p>Version 2.1.2 introduces <strong>configuration details<\/strong> in addition to <strong>file locations<\/strong> on a key admin card.<\/p>\n\n<p><strong>What's New in 2.1.1:<\/strong><\/p>\n\n<h4>2.1.1<\/h4>\n\n<p>Version 2.1.1 introduces <strong>cache file timestamps<\/strong>, <strong>staleness checks<\/strong>, and adds <strong>sitemap creation<\/strong> to both the GUI and CLI zip file creation.<\/p>\n\n<p><strong>What's New in 2.1.0:<\/strong><\/p>\n\n<h4>2.1.0<\/h4>\n\n<p>Version 2.1.0 introduces <strong>static sitemap generation<\/strong> - a file system-based approach that creates sitemaps from your actual cached files rather than the WordPress database.<\/p>\n\n<p>This update enables true static sitemaps that work in exported sites without WordPress, PHP, or a database connection - perfect for deployments to S3, Netlify, GitHub Pages, or any static hosting platform.<\/p>\n\n<p><strong>New WP-CLI Commands<\/strong><\/p>\n\n<ul>\n<li><code>wp scw sitemap<\/code> - Generate sitemap.xml from cached static files<\/li>\n<li><code>wp scw sitemap-delete<\/code> - Remove sitemap files<\/li>\n<\/ul>\n\n<p><strong>Why File System-Based?<\/strong><\/p>\n\n<p>Traditional WordPress sitemap plugins (Yoast SEO, Rank Math) query the database dynamically. This works great for live sites, but fails for static exports because there's no PHP or database available.<\/p>\n\n<p>Static Cache Wrangler scans your actual cached index.html files to build the sitemap, ensuring:<\/p>\n\n<ul>\n<li><strong>Perfect accuracy<\/strong> - sitemap matches exported content exactly<\/li>\n<li><strong>True portability<\/strong> - works without WordPress\/PHP\/database<\/li>\n<li><strong>SEO compliance<\/strong> - search engines see what users see<\/li>\n<li><strong>Deploy anywhere<\/strong> - S3, Netlify, GitHub Pages, any static host<\/li>\n<\/ul>\n\n<p><strong>Sitemap Features<\/strong><\/p>\n\n<ul>\n<li>Generates sitemaps.org compliant XML sitemap<\/li>\n<li>Creates XSL stylesheet for browser viewing<\/li>\n<li>Calculates priorities automatically (homepage = 1.0, deeper pages = 0.4)<\/li>\n<li>Assigns smart change frequencies (homepage = daily, pages = monthly)<\/li>\n<li>Includes last modification times from file metadata<\/li>\n<li>Developer filter hook: <code>stcw_sitemap_changefreq<\/code><\/li>\n<li>Multisite compatible with isolated sitemaps per site<\/li>\n<li>Fast performance: ~50-100ms per 100 cached files<\/li>\n<\/ul>\n\n<p><strong>Typical Workflow<\/strong><\/p>\n\n<pre><code>`\n<\/code><\/pre>\n\n<p>wp scw enable          # Enable generation<\/p>\n\nBrowse your site...\n\n<p>wp scw process        # Process assets\nwp scw sitemap        # Generate sitemap (NEW!)\nwp scw zip            # Export with sitemap included<\/p>\n\nDeploy to S3\/Netlify...\n\n<pre><code>`\n<\/code><\/pre>\n\n<p><strong>View in Browser<\/strong><\/p>\n\n<p>Open https:\/\/your-site.com\/sitemap.xml - the XSL stylesheet transforms it into a readable HTML table with color-coded priorities and sortable columns.<\/p>\n\n<p><strong>Technical Implementation<\/strong><\/p>\n\n<ul>\n<li>New STCW_Sitemap_Generator class scans cached directory recursively<\/li>\n<li>Uses WordPress Filesystem API for all file operations<\/li>\n<li>Proper output escaping and sanitization throughout<\/li>\n<li>No database queries - pure file system operations<\/li>\n<li>Multisite compatible with isolated sitemaps per site<\/li>\n<li>Performance optimized: ~50-100ms per 100 files, ~2MB memory for 1,000+ pages<\/li>\n<\/ul>\n\n<p><strong>GUI Coming Soon<\/strong><\/p>\n\n<p>This release is CLI-only to validate the approach and gather user feedback. A visual interface in WordPress admin is planned for version 2.2.0.<\/p>\n\n<p><strong>Compatibility<\/strong><\/p>\n\n<ul>\n<li>WordPress 6.8.3<\/li>\n<li>PHP 7.4, 8.0, 8.1, 8.2, 8.3<\/li>\n<li>Multisite compatible<\/li>\n<li>WP-CLI required for sitemap generation<\/li>\n<\/ul>\n\n<p><strong>What's New in 2.0.7:<\/strong><\/p>\n\n<h4>2.0.7<\/h4>\n\n<p>Version 2.0.7 is a <strong>major compatibility enhancement release<\/strong>, focused on improving support for Kadence Blocks and all Gutenberg block plugins that rely on dynamic JavaScript and CSS enqueues.<\/p>\n\n<p>This update improves the accuracy of static exports by capturing <strong>all front-end assets that WordPress prints dynamically<\/strong>\u2014including those output by <code>wp_print_scripts()<\/code> and <code>wp_print_footer_scripts()<\/code>\u2014ensuring that interactive block functionality is preserved outside of WordPress.<\/p>\n\n<p><strong>Compatibility Improvements<\/strong><\/p>\n\n<ul>\n<li><strong>Full Kadence Blocks compatibility<\/strong> \u2013 Global front-end scripts and CSS are now correctly captured, enabling buttons, accordions, icons, Lottie animations, progress bars, and other JS-driven components to function in static exports.<\/li>\n<li><strong>Enhanced Gutenberg block support<\/strong> \u2013 STCW now reliably detects and exports front-end assets from <em>all<\/em> major block suites (Spectra, Stackable, GenerateBlocks, CoBlocks, Otter, etc.).<\/li>\n<li><strong>Improved script capture logic<\/strong> \u2013 Dynamically enqueued scripts are now collected before theme rendering, eliminating missing-asset issues for blocks that load JS only when present on a page.<\/li>\n<li><strong>Better preservation of front-end behavior<\/strong> \u2013 Assets required for tooltips, animations, scroll effects, responsive layouts, and block initialization are now exported consistently.<\/li>\n<li><strong>Resolved blank-page edge cases<\/strong> \u2013 Updated capture timing ensures no interference with WordPress's script printing lifecycle, preventing rendering conflicts.<\/li>\n<\/ul>\n\n<p><strong>Technical Enhancements<\/strong><\/p>\n\n<ul>\n<li>Added an early script-queue flush to collect output from:\n\n<ul>\n<li><code>wp_print_head_scripts()<\/code><\/li>\n<li><code>wp_print_scripts()<\/code><\/li>\n<li><code>wp_print_footer_scripts()<\/code><\/li>\n<\/ul><\/li>\n<li>Captured script output is appended to the main buffer <strong>before<\/strong> asset extraction, ensuring regex-based scanners detect dynamically enqueued JS\/CSS.<\/li>\n<li>Improved compatibility with theme and plugin lifecycle order by isolating script capture from template rendering.<\/li>\n<li>Enhanced support for plugins that insert block assets conditionally based on block presence.<\/li>\n<li>Increased reliability of static exports for mixed-content layouts and advanced interactive block patterns.<\/li>\n<\/ul>\n\n\n\n<h3>WP-CLI Commands<\/h3>\n\n<p>Full control without the dashboard:<\/p>\n\n<ul>\n<li><code>wp scw enable<\/code> \u2013 Enable static generation  <\/li>\n<li><code>wp scw disable<\/code> \u2013 Disable static generation  <\/li>\n<li><code>wp scw status<\/code> \u2013 View current status and statistics  <\/li>\n<li><code>wp scw process<\/code> \u2013 Process all pending assets  <\/li>\n<li><code>wp scw clear<\/code> \u2013 Remove all generated static files  <\/li>\n<li><code>wp scw zip<\/code> \u2013 Create a ZIP archive of the site  <\/li>\n<li><code>wp scw sitemap<\/code> \u2013 Generate sitemap.xml from cached files<\/li>\n<li><code>wp scw sitemap --target-url=&lt;url&gt;<\/code> \u2013 Generate sitemap for deployment URL<\/li>\n<li><code>wp scw sitemap-delete<\/code> \u2013 Remove sitemap files<\/li>\n<\/ul>\n\n\n\n<h3>Advanced Configuration<\/h3>\n\n<h3>Server Requirements<\/h3>\n\n<ul>\n<li><strong>PHP:<\/strong> 7.4 or higher<\/li>\n<li><strong>WordPress:<\/strong> 5.0 or higher<\/li>\n<li><strong>PHP Extensions:<\/strong> ZipArchive (for ZIP export), curl or allow_url_fopen (for asset downloads)<\/li>\n<li><strong>Disk Space:<\/strong> Varies based on site size (static files = ~1.5x site size)<\/li>\n<li><strong>Permissions:<\/strong> Write access to <code>wp-content\/cache\/<\/code><\/li>\n<\/ul>\n\n<h3>Performance Characteristics<\/h3>\n\n<ul>\n<li><strong>Generation overhead:<\/strong> ~50\u2013100 ms\/page<\/li>\n<li><strong>Memory:<\/strong> ~2 MB additional per request<\/li>\n<li><strong>Asset downloads:<\/strong> Handled asynchronously in background<\/li>\n<\/ul>\n\n<h3>Disk Space Considerations<\/h3>\n\n<p><strong>Typical Usage:<\/strong>\n* Small site (10-50 pages): 50-200 MB\n* Medium site (100-500 pages): 200 MB - 1 GB<br \/>\n* Large site (1000+ pages): 1-5 GB<\/p>\n\n<p>Monitor disk usage via Settings \u2192 Static Cache or <code>wp scw status<\/code>.<\/p>\n\n<p>To reduce disk usage, exclude large pages:\n    add_filter('stcw_should_generate', function($should, $url) {\n        if (strpos($url, '\/gallery\/') !== false) {\n            return false;\n        }\n        return $should;\n    }, 10, 2);<\/p>\n\n<h3>What Gets Downloaded<\/h3>\n\n<p>\u2705 CSS files, JavaScript files, Images (all formats), Fonts, Favicons, Responsive images (srcset)<\/p>\n\n<p>\u274c External CDN assets (preserved as-is), Third-party embeds (YouTube, Twitter), Video\/audio files (intentionally excluded to save space)<\/p>\n\n\n\n<h3>Use Cases<\/h3>\n\n<p><strong>Offline Documentation<\/strong> \u2014 Generate static, portable documentation sites for offline or air-gapped environments.<br \/>\n<strong>Client Deliverables<\/strong> \u2014 Deliver static versions that eliminate hosting complexity.<br \/>\n<strong>Failover Ready<\/strong> \u2014 Rsync to a read-only Nginx\u00ae server for uninterrupted uptime.<br \/>\n<strong>CDN \/ Amazon S3\u00ae Deployment<\/strong> \u2014 Publish static HTML to Amazon S3\u00ae, Cloudflare\u00ae, or Netlify\u00ae for instant global delivery.<br \/>\n<strong>Geo Load Balancing<\/strong> \u2014 Serve from multiple regions with Cloudflare or Amazon Route53\u00ae for high performance.<br \/>\n<strong>Archival Snapshots<\/strong> \u2014 Capture your site before major redesigns or migrations.<\/p>\n\n\n\n<h3>Trademark Recognition and Legal Disclaimer<\/h3>\n\n<p>All product names, logos, and brands referenced in this plugin and its documentation are property of their respective owners.<\/p>\n\n<p><strong>Static Cache Wrangler<\/strong> (also historically referred to as <strong>Static Cache Generator<\/strong>) must always be referenced using all three words \u2014 <strong>\u201cStatic Cache Wrangler.\u201d<\/strong><\/p>\n\n<p>The prior name <strong>Static Cache Generator<\/strong> is considered a <em>legacy name<\/em> and is no longer in use, as it did not meet <a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/detailed-plugin-guidelines\/#1-plugins-must-have-unique-names\">WordPress.org plugin naming standards<\/a> due to its generic nature. That name was originally selected in good faith to avoid any potential confusion with existing trademarks or brand names.<\/p>\n\n<p>Prior to renaming, <strong>U.S. and international trademark databases<\/strong> were reviewed by <strong>independent intellectual property counsel<\/strong>, and <strong>no conflicts or registered marks<\/strong> were identified for the phrases <strong>\u201cStatic Cache Generator,\u201d \u201cCache Generator,\u201d<\/strong> or <strong>\u201cStatic Cache.\u201d<\/strong><br \/>\nCounsel further cited legal precedent confirming that generic terms cannot be trademarked, including:<br \/>\n- <em>USPTO v. Booking.com B.V.<\/em>, 591 U.S. ___ (2020)<br \/>\n- <em>In re Hotels.com, L.P.<\/em>, 573 F.3d 1300 (Fed. Cir. 2009)<br \/>\n- <em>Kellogg Co. v. National Biscuit Co.<\/em>, 305 U.S. 111 (1938)<\/p>\n\n<p>The current and accepted plugin name <strong>Static Cache Wrangler<\/strong>:<br \/>\n- Does <strong>not<\/strong> imply, refer to, or associate with the standalone trademark <strong>\u201cWrangler\u201d<\/strong> of <strong>Wrangler Apparel<\/strong>.<br \/>\n- Does <strong>not<\/strong> imply, refer to, or associate with the standalone trademark <strong>\u201cCache\u201d<\/strong> (U.S. Reg. No. <strong>6094619<\/strong>, registered July 7, 2020).<br \/>\n- Does <strong>not<\/strong> imply, refer to, or associate with any trademarks involving the standalone term <strong>\u201cStatic.\u201d<\/strong><br \/>\n- Has <strong>no connection<\/strong> with <strong>Automattic Inc.<\/strong>, its employees, or any internal job titles (e.g., \u201cWrangler\u201d) used within Automattic. The name <strong>Static Cache Wrangler<\/strong> does not suggest endorsement, employment, or automation of work performed by Automattic personnel.<\/p>\n\n<p>This clarification is provided in accordance with <strong>U.S. trademark law<\/strong>, <strong>WordPress.org plugin repository policies<\/strong>, and general principles of fair use and naming transparency.<br \/>\n<em>(U.S. Reg. No. 6094619 reference: \u201cCACHE,\u201d Registered July 7, 2020; Status: LIVE\/REGISTRATION\/Issued and Active \u2014 TSDR, generated 2025-10-23 08:17:17 EDT.)<\/em><\/p>\n\n\n\n<h3>Third-Party Trademark Notices<\/h3>\n\n<p>NGINX\u00ae is a registered trademark of F5, Inc.<br \/>\nAmazon S3\u00ae and Route 53\u2122 are trademarks of Amazon Technologies, Inc.<br \/>\nNetlify\u00ae is a registered trademark of Netlify, Inc.<br \/>\nCloudflare\u00ae and Cloudflare Pages\u2122 are trademarks of Cloudflare, Inc.<br \/>\nWP-CLI\u00ae and Gutenberg\u00ae are trademarks of the WordPress Foundation.<br \/>\nElementor\u00ae is a registered trademark of Elementor Ltd.<br \/>\nDivi\u00ae is a registered trademark of Elegant Themes, Inc.<br \/>\nGitHub\u00ae is a registered trademark of GitHub, Inc.<br \/>\nYouTube\u00ae is a registered trademark of Google LLC.<br \/>\nTwitter\u00ae is a registered trademark of X Corp.<br \/>\nModernCLI.Dev is owned by Derick Schaefer.<\/p>\n\n<p>This plugin has not been tested by any of the services, platforms, software projects, nor their respective owners.<br \/>\nThese names and services are referenced solely as examples of where static cache files might be repurposed, used, uploaded, stored, or transmitted.<\/p>\n\n<p>This plugin is an independent open-source project and is <strong>not endorsed by, affiliated with, or sponsored by<\/strong> any of the companies or open-source projects mentioned herein.<\/p>\n\n\n\n<h3>Support<\/h3>\n\n<p>For issues, requests, and documentation, visit:<br \/>\n<a href=\"https:\/\/github.com\/derickschaefer\/static-cache-wrangler\">GitHub \u2013 Static Cache Wrangler<\/a>\n<a href=\"https:\/\/moderncli.dev\/code\/static-cache-wrangler\/\">Documentation &amp; Guides<\/a><\/p>\n\n\n\n<p><strong>Interested in learning more about command-line interfaces and WP-CLI?<\/strong><br \/>\nCheck out <a href=\"https:\/\/moderncli.dev\">ModernCLI.dev<\/a> \u2014 a practical guide to mastering modern CLI workflows.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/static-cache-wrangler\/<\/code> or install via Plugins &gt; Add New.<\/li>\n<li>Activate the plugin from the <em>Plugins<\/em> screen.<\/li>\n<li>Navigate to <strong>Settings \u2192 Static Cache<\/strong> to enable generation.<\/li>\n<li>Browse your site normally \u2014 pages are cached as they load.<\/li>\n<li>Click <strong>Download ZIP<\/strong> to export the complete static version.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20work%20with%20any%20theme%20or%20builder%3F\"><h3>Does it work with any theme or builder?<\/h3><\/dt>\n<dd><p>Yes \u2014 Static Cache Wrangler captures the final rendered HTML, so it works with any theme, builder, or framework (Elementor\u00ae, Divi\u00ae, Gutenberg\u00ae, etc.).<\/p><\/dd>\n<dt id=\"does%20it%20use%20a%20lot%20of%20resources%3F\"><h3>Does it use a lot of resources?<\/h3><\/dt>\n<dd><p>No \u2014 it's designed as a <em>lazy loader<\/em>, generating static pages only on demand with minimal memory and CPU impact.<\/p><\/dd>\n<dt id=\"does%20it%20modify%20my%20database%3F\"><h3>Does it modify my database?<\/h3><\/dt>\n<dd><p>No \u2014 it never alters your WordPress database schema or adds tables.<br \/>\nAll plugin-related options, transients, and scheduled events are automatically removed upon uninstall.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20exported%20site%20on%20any%20server%3F\"><h3>Can I use the exported site on any server?<\/h3><\/dt>\n<dd><p>Absolutely. The output is plain HTML and assets \u2014 deploy it on any web server, CDN, or open it directly in a browser.<\/p><\/dd>\n<dt id=\"does%20it%20handle%20dynamic%20content%3F\"><h3>Does it handle dynamic content?<\/h3><\/dt>\n<dd><p>Dynamic features like forms, comments, or live feeds won't function in the static version, but all rendered content and assets are preserved exactly.<\/p><\/dd>\n<dt id=\"how%20do%20i%20update%20after%20making%20changes%3F\"><h3>How do I update after making changes?<\/h3><\/dt>\n<dd><p>Revisit the updated pages while generation is enabled, or run <code>wp scw process<\/code> to rebuild all static content.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20configuration%3F\"><h3>Can I customize the configuration?<\/h3><\/dt>\n<dd><p>Yes! You can customize file locations and behavior using constants in <code>wp-config.php<\/code>:<\/p>\n\n<p><strong>Change static files location:<\/strong>\n    define('STCW_STATIC_DIR', WP_CONTENT_DIR . '\/my-static-files\/');<\/p>\n\n<p><strong>Change assets location:<\/strong>\n    define('STCW_ASSETS_DIR', WP_CONTENT_DIR . '\/my-assets\/');<\/p>\n\n<p><strong>Disable async asset processing (process immediately):<\/strong>\n    define('STCW_ASYNC_ASSETS', false);<\/p><\/dd>\n<dt id=\"what%20if%20i%20need%20advanced%20customization%3F\"><h3>What if I need advanced customization?<\/h3><\/dt>\n<dd><p>You can use WordPress filters to customize behavior:<\/p>\n\n<p><strong>Exclude specific URLs from generation:<\/strong>\n    add_filter('stcw_should_generate', function($should, $url) {\n        if (strpos($url, '\/private\/') !== false) {\n            return false;\n        }\n        return $should;\n    }, 10, 2);<\/p>\n\n<p><strong>Modify HTML before saving:<\/strong>\n    add_filter('stcw_before_save_html', function($html) {\n        return str_replace('', '<\/p>\n\nGenerated: ' . date('Y-m-d') . '\n\n<p>', $html);\n    });<\/p><\/dd>\n<dt id=\"what%20wordpress%20meta%20tags%20are%20removed%20in%20version%202.0.5%3F\"><h3>What WordPress meta tags are removed in version 2.0.5?<\/h3><\/dt>\n<dd><p>Version 2.0.5 removes the following WordPress-specific meta tags from static HTML:\n* RSD (Really Simple Discovery) links for XML-RPC\n* Windows Live Writer manifest links\n* WordPress shortlink tags\n* Generator meta tags (WordPress version)\n* REST API discovery links\n* oEmbed discovery links\n* REST API HTTP headers\n* <code>data-wp-strategy<\/code> attributes on script tags<\/p>\n\n<p>These tags serve no purpose in static sites and removing them improves portability and security.<\/p><\/dd>\n<dt id=\"how%20do%20i%20use%20the%20new%20developer%20hooks%3F\"><h3>How do I use the new developer hooks?<\/h3><\/dt>\n<dd><p><strong>Remove additional WordPress tags:<\/strong><\/p>\n\n<pre><code>add_action('stcw_remove_wp_head_tags', function() {\n    remove_action('wp_head', 'your_custom_action');\n});\n<\/code><\/pre>\n\n<p><strong>Modify HTML before saving:<\/strong><\/p>\n\n<pre><code>add_filter('stcw_process_static_html', function($html) {\n    \/\/ Add custom footer, remove tracking, etc.\n    return $html;\n});\n<\/code><\/pre>\n\n<p>See the plugin documentation for 15+ complete examples.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20regenerate%20my%20static%20files%20after%20upgrading%3F\"><h3>Do I need to regenerate my static files after upgrading?<\/h3><\/dt>\n<dd><p>No, but it's recommended. Existing static files will continue to work, but regenerating will give you the cleanest output with all WordPress meta tags removed:<\/p>\n\n<pre><code>wp scw clear\nwp scw enable\n<\/code><\/pre>\n\n<p>Then browse your site to regenerate pages.<\/p><\/dd>\n<dt id=\"can%20i%20create%20companion%20plugins%20for%20static%20cache%20wrangler%3F\"><h3>Can I create companion plugins for Static Cache Wrangler?<\/h3><\/dt>\n<dd><p>Yes! Version 2.0.5 introduces two hooks specifically designed for companion plugins:\n* <code>stcw_remove_wp_head_tags<\/code> - Remove additional WordPress tags\n* <code>stcw_process_static_html<\/code> - Modify final HTML output<\/p>\n\n<p>These enable agencies, developers, and SaaS providers to build specialized extensions without modifying core plugin code.<\/p><\/dd>\n<dt id=\"will%20this%20work%20with%20my%20seo%20plugin%3F\"><h3>Will this work with my SEO plugin?<\/h3><\/dt>\n<dd><p>Yes! Version 2.0.5 is fully compatible with:\n* Yoast SEO\n* Rank Math\n* All in One SEO Pack\n* SEOPress\n* The SEO Framework<\/p>\n\n<p>The meta tag removal only affects WordPress core tags, not SEO plugin meta tags that contain important information.<\/p>\n\n<\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1.5<\/h4>\n\n<ul>\n<li><strong>FIX:<\/strong> Corrected auto asset processing script path so background processing loads reliably.<\/li>\n<li><strong>FIX:<\/strong> <code>STCW_ASYNC_ASSETS<\/code> set to false now processes assets immediately during page generation.<\/li>\n<li><strong>FIX:<\/strong> Failed asset downloads are removed from queue after retries to avoid endless cron reprocessing.<\/li>\n<li><strong>FIX:<\/strong> ZIP exports no longer duplicate assets already included via static directory packaging.<\/li>\n<\/ul>\n\n<h4>2.1.4<\/h4>\n\n<ul>\n<li>Added: STCW_META comment injection with WordPress post data (ID, post_type, permalink, dates, template)<\/li>\n<li>Added: <code>scw_cache_metadata<\/code> filter for extending metadata<\/li>\n<li>Enhanced: Cached HTML now includes authoritative WordPress data for headless CMS migrations<\/li>\n<li>Performance: Zero database queries, uses existing $post object (~200 bytes added to HTML)<\/li>\n<\/ul>\n\n<h4>2.1.3<\/h4>\n\n<ul>\n<li><strong>IMPROVED:<\/strong> Adds exclusions for index.php, username, and other bot cralwed URLs that were creating errant cache files.<\/li>\n<li><strong>FIX:<\/strong> Version number corrected.<\/li>\n<\/ul>\n\n<h4>2.1.2<\/h4>\n\n<ul>\n<li><strong>NEW:<\/strong> Added configuration details in addition to file locations on main admin card<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li><strong>NEW:<\/strong> Cache freshness system with automatic staleness detection<\/li>\n<li><strong>NEW:<\/strong> Metadata stamps injected into all generated HTML files<\/li>\n<li><strong>NEW:<\/strong> TTL-based expiry with configurable cache lifetime (default 24 hours)<\/li>\n<li><strong>NEW:<\/strong> Automatic cache validation on every page request<\/li>\n<li><strong>NEW:<\/strong> Plugin version tracking in metadata for upgrade detection<\/li>\n<li><strong>NEW:<\/strong> Automatic sitemap generation when creating ZIP exports<\/li>\n<li><strong>NEW:<\/strong> STCW_CACHE_TTL constant for configuring cache lifetime<\/li>\n<li><strong>NEW:<\/strong> STCW_SITEMAP_URL constant for deployment URL configuration<\/li>\n<li><strong>IMPROVED:<\/strong> Reduced unnecessary page regeneration by 90%+ when content hasn't changed<\/li>\n<li><strong>IMPROVED:<\/strong> ZIP exports now always include fresh sitemap.xml automatically<\/li>\n<li><strong>IMPROVED:<\/strong> Better resource utilization - only regenerates when truly needed<\/li>\n<li><strong>IMPROVED:<\/strong> Smarter regeneration triggers (TTL expiry or plugin upgrade)<\/li>\n<li><strong>IMPROVED:<\/strong> Enhanced logging for cache freshness decisions<\/li>\n<li><strong>PERFORMANCE:<\/strong> Average 1-2ms overhead for staleness check (reads first 512 bytes only)<\/li>\n<li><strong>PERFORMANCE:<\/strong> Zero regeneration cost for fresh files (immediate skip)<\/li>\n<li><strong>PERFORMANCE:<\/strong> Typical 90%+ cache hit rate in production environments<\/li>\n<li><strong>COMPATIBLE:<\/strong> WordPress 6.9, PHP 7.4-8.3<\/li>\n<li><strong>FIX:<\/strong> Eliminated unnecessary regeneration on every page load<\/li>\n<li><strong>FIX:<\/strong> Resolved race conditions when multiple requests hit same page<\/li>\n<\/ul>\n\n<p><strong>Cache Freshness System<\/strong><\/p>\n\n<p>Version 2.1.1 introduces intelligent cache freshness management that dramatically reduces server load by avoiding unnecessary page regeneration. Every generated HTML file now includes a metadata stamp tracking when it was created and which plugin version generated it.<\/p>\n\n<p><strong>How It Works:<\/strong>\n- Each static HTML file contains metadata: <code>&lt;!-- StaticCacheWrangler: generated=2025-12-04T15:30:00Z; plugin=2.1.1 --&gt;<\/code>\n- On every page request, plugin checks if existing cached file is still fresh\n- File is considered stale if: (1) metadata missing, (2) plugin version changed, or (3) age exceeds TTL\n- Fresh files skip regeneration entirely - returning existing cached version\n- Stale files trigger regeneration with fresh content and updated metadata<\/p>\n\n<p><strong>Configuration Options:<\/strong>\n    `php\n\/\/ In wp-config.php<\/p>\n\n<p>\/\/ Set cache lifetime (default: 86400 = 24 hours)\ndefine('STCW_CACHE_TTL', 86400);    \/\/ 24 hours (default)\ndefine('STCW_CACHE_TTL', 3600);     \/\/ 1 hour (aggressive)\ndefine('STCW_CACHE_TTL', 604800);   \/\/ 1 week (conservative)\ndefine('STCW_CACHE_TTL', 0);        \/\/ Never expire (version check only)<\/p>\n\n<p>\/\/ Set sitemap URL for deployment (default: uses site URL)\ndefine('STCW_SITEMAP_URL', 'https:\/\/static.example.com');\ndefine('STCW_SITEMAP_URL', 'https:\/\/cdn.mysite.com');\n    `<\/p>\n\n<p><strong>Automatic Sitemap in ZIP Exports:<\/strong><\/p>\n\n<p>ZIP exports now automatically generate fresh sitemaps before packaging:\n- No need to manually run <code>wp scw sitemap<\/code> before <code>wp scw zip<\/code>\n- Sitemap always reflects current cached content\n- Uses configured STCW_SITEMAP_URL if deploying to different domain\n- Seamless workflow: <code>wp scw zip<\/code> includes everything<\/p>\n\n<p><strong>Performance Characteristics:<\/strong><\/p>\n\n<p>Typical production behavior over 24-hour cycle:\n- Hours 0-23: \"Cache fresh, skipping regeneration\" (0ms overhead)\n- Hour 24: \"TTL exceeded, marking stale\" \u2192 Regeneration (~50-500ms)\n- After plugin upgrade: Immediate regeneration on next request\n- Result: ~90% reduction in unnecessary regeneration<\/p>\n\n<p><strong>Real-World Example from Production Logs:<\/strong>\n    `\n[04-Dec-2025 11:21:57 UTC] TTL exceeded, marking stale: index.html (age: 121938s, ttl: 86400s)\n[04-Dec-2025 11:21:57 UTC] Cache stale, regenerating: index.html\n[04-Dec-2025 11:21:57 UTC] Successfully saved: index.html<\/p>\n\n<p>[04-Dec-2025 11:22:29 UTC] Cache fresh, skipping regeneration: index.html\n[04-Dec-2025 11:24:11 UTC] Cache fresh, skipping regeneration: index.html\n[04-Dec-2025 11:45:06 UTC] Cache fresh, skipping regeneration: index.html\n... (50+ cache hits before next regeneration)\n    `<\/p>\n\n<p><strong>Migration Notes:<\/strong>\n- No breaking changes - fully backward compatible with 2.1.0\n- Pre-2.1.1 cached files without metadata automatically regenerate once (get fresh stamps)\n- After initial regeneration, normal TTL-based freshness checking applies\n- No manual intervention required<\/p>\n\n<p><strong>Why This Matters:<\/strong><\/p>\n\n<p>Before v2.1.1: Every page request regenerated HTML even when nothing changed<br \/>\nAfter v2.1.1: Only regenerate when content is actually stale (24h+ old or plugin upgraded)<\/p>\n\n<p>Result: Massive reduction in CPU usage, memory consumption, and page generation time for sites with moderate to high traffic.<\/p>\n\n<p><strong>Use Cases:<\/strong><\/p>\n\n<p><strong>Development (1-hour TTL):<\/strong>\n    <code>php\ndefine('STCW_CACHE_TTL', 3600);  \/\/ See changes within an hour<\/code><\/p>\n\n<p><strong>Staging (6-hour TTL):<\/strong>\n    <code>php\ndefine('STCW_CACHE_TTL', 21600);  \/\/ Balance freshness vs. performance<\/code><\/p>\n\n<p><strong>Production (24-hour TTL - default):<\/strong>\n    <code>php\n\/\/ No configuration needed - 24 hours is sensible default<\/code><\/p>\n\n<p><strong>High-availability failover (1-week TTL):<\/strong>\n    <code>php\ndefine('STCW_CACHE_TTL', 604800);  \/\/ Very stable, rarely regenerate<\/code><\/p>\n\n<p><strong>Archive\/preservation (never expire):<\/strong>\n    <code>php\ndefine('STCW_CACHE_TTL', 0);  \/\/ Only regenerate on plugin upgrades<\/code><\/p>\n\n<p><strong>Technical Implementation:<\/strong><\/p>\n\n<p>Staleness detection is highly optimized:\n- Reads only first 512 bytes of cached file (not entire file)\n- Regex pattern: <code>\/&lt;!--\\s*StaticCacheWrangler:\\s*generated=([^;]+);\\s*plugin=([^\\s;]+)\\s*--&gt;\/<\/code>\n- Validates timestamp format (ISO 8601)\n- Compares plugin versions (semantic versioning aware)\n- Calculates age and compares against TTL\n- Decision made in ~1-2ms average<\/p>\n\n<p>No external storage required:\n- No database tables\n- No WordPress options\n- No transients\n- No cron jobs\n- Metadata lives in HTML files themselves (self-contained)<\/p>\n\n<p><strong>Developer Benefits:<\/strong><\/p>\n\n<p>The cache freshness system enables sophisticated workflows:\n- Rsync to failover servers with confidence files are current\n- Deploy to CDN knowing cache reflects recent WordPress state\n- Monitor cache hit rates via debug logs\n- Tune TTL per environment for optimal balance\n- Zero-impact when cache is fresh (no database queries, no filesystem writes)<\/p>\n\n<h3>= 2.1.0 =<\/h3>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li><strong>NEW:<\/strong> Static sitemap generation from cached files (CLI-only)<\/li>\n<li><strong>NEW:<\/strong> <code>wp scw sitemap<\/code> command generates sitemap.xml and sitemap.xsl<\/li>\n<li><strong>NEW:<\/strong> <code>wp scw sitemap-delete<\/code> command removes sitemap files<\/li>\n<li><strong>NEW:<\/strong> File system-based approach - scans cached files instead of database<\/li>\n<li><strong>NEW:<\/strong> Automatic priority calculation based on URL depth<\/li>\n<li><strong>NEW:<\/strong> Smart change frequency assignment (homepage = daily, pages = monthly)<\/li>\n<li><strong>NEW:<\/strong> XSL stylesheet for browser-viewable sitemaps<\/li>\n<li><strong>NEW:<\/strong> Developer hook: <code>stcw_sitemap_changefreq<\/code> filter for customization<\/li>\n<li><strong>IMPROVED:<\/strong> Sitemaps work in static exports without WordPress\/PHP\/database<\/li>\n<li><strong>IMPROVED:<\/strong> Perfect accuracy - sitemap reflects actual exported content<\/li>\n<li><strong>IMPROVED:<\/strong> Multisite compatible with isolated sitemaps per site<\/li>\n<li><strong>PERFORMANCE:<\/strong> ~50-100ms scan time per 100 cached files, ~2MB memory for 1,000+ pages<\/li>\n<li><strong>FIX:<\/strong> Fixed CSS mismatches resulting in admin card layout<\/li>\n<li><strong>COMPATIBLE:<\/strong> WordPress 6.8.3, PHP 7.4-8.3<\/li>\n<li><strong>NOTE:<\/strong> GUI interface planned for v2.2.0 (currently CLI-only)<\/li>\n<\/ul>\n\n<p><strong>Why File System-Based?<\/strong>\nTraditional WordPress sitemap plugins (Yoast SEO, Rank Math) query the database dynamically. This works great for live sites, but fails for static exports because there's no PHP or database available. Static Cache Wrangler scans your actual cached index.html files to build the sitemap, ensuring perfect accuracy and true portability.<\/p>\n\n<p><strong>Sitemap Features<\/strong>\n* Generates sitemaps.org compliant XML sitemap\n* Creates XSL stylesheet for browser viewing\n* Calculates priorities automatically (homepage = 1.0, deeper pages = 0.4)\n* Assigns smart change frequencies based on URL patterns\n* Includes last modification times from file metadata\n* Multisite compatible with isolated sitemaps per site\n* Fast performance: ~50-100ms per 100 cached files<\/p>\n\n<p><strong>New WP-CLI Commands<\/strong>\n* <code>wp scw sitemap<\/code> - Generate sitemap from cached files\n* <code>wp scw sitemap-delete<\/code> - Remove sitemap files<\/p>\n\n<p><strong>Typical Workflow<\/strong>\n    <code>wp scw enable          # Enable generation\nwp scw process        # Process assets\nwp scw sitemap        # Generate sitemap (NEW!)\nwp scw zip            # Export with sitemap included<\/code><\/p>\n\n<p>View your sitemap at https:\/\/your-site.com\/sitemap.xml - the XSL stylesheet transforms it into a readable HTML table.<\/p>\n\n<p><strong>Technical Implementation<\/strong>\n* New STCW_Sitemap_Generator class scans cached directory recursively\n* Uses WordPress Filesystem API for all file operations\n* Proper output escaping and sanitization throughout\n* Developer filter hook for customization\n* No database queries - pure file system operations\n* GUI interface planned for version 2.2.0<\/p>\n\n<h3>= 2.0.7 =<\/h3>\n\n<ul>\n<li><strong>Major Compatibility Enhancement Release<\/strong><\/li>\n<li>Version 2.0.7 delivers extensive improvements to <strong>Kadence Blocks support<\/strong> and significantly enhances compatibility with <strong>all Gutenberg block plugins<\/strong> that rely on dynamically printed JavaScript and CSS.<\/li>\n<li>Ensures <strong>accurate static exports<\/strong> by capturing all front-end assets output by WordPress during rendering\u2014including assets printed via <code>wp_print_scripts()<\/code> and <code>wp_print_footer_scripts()<\/code>\u2014preserving full block interactivity outside of WordPress.<\/li>\n<\/ul>\n\n<p><strong>Compatibility Improvements<\/strong>\n* <strong>Full Kadence Blocks compatibility<\/strong> \u2013 Global front-end scripts and styles are now correctly captured, enabling complete functionality for JS-dependent components (accordions, buttons, icons, Lottie animations, progress bars, etc.).\n* <strong>Enhanced Gutenberg block suite support<\/strong> \u2013 Reliable detection and export of dynamic assets from Spectra, Stackable, GenerateBlocks, CoBlocks, Otter, and other major block libraries.\n* <strong>Improved dynamic script capture logic<\/strong> \u2013 Scripts enqueued conditionally based on block presence are now collected earlier, preventing missing-asset issues.\n* <strong>Better preservation of interactive behavior<\/strong> \u2013 Tooltips, animations, scroll effects, responsive scripting, and block initialization logic now export more consistently.\n* <strong>Resolved rare blank-page rendering issues<\/strong> caused by timing conflicts in WordPress\u2019s script-printing lifecycle.<\/p>\n\n<p><strong>Technical Enhancements<\/strong>\n* Implemented an early script-queue flush to capture output from:\n  * <code>wp_print_head_scripts()<\/code>\n  * <code>wp_print_scripts()<\/code>\n  * <code>wp_print_footer_scripts()<\/code>\n* Captured script output is now injected into the main buffer <strong>before<\/strong> asset parsing, ensuring regex scanners detect all JS\/CSS printed during rendering.\n* Improved isolation of script-capture routines from theme templates to avoid lifecycle interference.\n* Better support for plugins that enqueue front-end assets only when specific blocks are present.\n* Increased reliability for mixed-content layouts and advanced interactive block patterns.<\/p>\n\n<p><strong>Compatibility<\/strong>\n* Tested with WordPress 6.9 and PHP 8.3.6\n* Fully backward compatible with 2.0.6<\/p>\n\n<p><strong>Migration Notes<\/strong>\n* No configuration changes required.\n* Recommended: Regenerate static exports after update to ensure full compatibility with updated asset-capture behavior.<\/p>\n\n<h4>2.0.6<\/h4>\n\n<ul>\n<li><strong>WordPress.org Compliance Release \u2013 \u201cMoving Goal Post\u201d<\/strong><\/li>\n<li>Version 2.0.6 is a <strong>WordPress.org compliance update<\/strong> ensuring full compatibility with the latest repository validation standards introduced in 2025<\/li>\n<li>Implemented <strong>prefix standardization<\/strong> \u2013 all template variables, global references, and filters now use the <code>stcw_<\/code> prefix for WordPress.NamingConventions.PrefixAllGlobals compliance<\/li>\n<li>Achieved <strong>100% pass<\/strong> on the updated \u201cCheck Plugin\u201d API validation scans<\/li>\n<li>Enhanced <strong>namespace isolation<\/strong> and improved code safety for plugin interoperability<\/li>\n<li><strong>Improved inline documentation<\/strong> for better code clarity and compliance traceability<\/li>\n<li><strong>Developer Enhancements<\/strong><\/li>\n<li>Introduced new developer hooks to support the forthcoming <strong>Static Cache Wrangler Performance Profiler<\/strong> MU plugin available here: <a href=\"https:\/\/moderncli.dev\/code\/static-cache-wrangler\/performance-profiler\/\">Performance Profiler<\/a><\/li>\n<li>Added foundations for advanced <strong>performance profiling and benchmarking<\/strong> via WP\u2011CLI integration<\/li>\n<li>Enhanced developer experience with cleaner structure for extending cache behavior<\/li>\n<li><strong>Improvements<\/strong><\/li>\n<li>Non\u2011functional update focused on long\u2011term maintainability and ecosystem compliance<\/li>\n<li>Verified adherence to current WordPress.org repository and coding\u2011standards checks<\/li>\n<li>Refined internal structure to support future diagnostic and profiling modules<\/li>\n<li><strong>Compatibility<\/strong><\/li>\n<li>Tested with WordPress 6.8.3 and PHP 7.4\u202f\u2013\u202f8.3<\/li>\n<li>Fully backward compatible with 2.0.5<\/li>\n<li><strong>Migration Notes<\/strong><\/li>\n<li>No functional changes to caching logic<\/li>\n<li>Recommended: Regenerate static files after update for clean metadata<\/li>\n<\/ul>\n\n<h4>2.0.5<\/h4>\n\n<ul>\n<li><strong>Enhanced Static HTML Output<\/strong><\/li>\n<li>Implemented hybrid WordPress meta tag removal using native <code>remove_action()<\/code> with regex safety net<\/li>\n<li>Removed 7+ WordPress-specific meta tags from static output (RSD, wlwmanifest, shortlinks, generator, REST API, oEmbed discovery)<\/li>\n<li>Stripped <code>data-wp-strategy<\/code> attributes from script tags for cleaner HTML<\/li>\n<li>Reduced HTML file size by 3.1% and generation time by 2.3%<\/li>\n<li>Improved security by hiding WordPress version information from static exports<\/li>\n<li><strong>New Developer Hooks<\/strong><\/li>\n<li>Added <code>stcw_remove_wp_head_tags<\/code> action hook - remove additional WordPress head tags before generation<\/li>\n<li>Added <code>stcw_process_static_html<\/code> filter hook - modify HTML output before saving to file<\/li>\n<li>Added <code>STCW_Generator::remove_wordpress_meta_tags()<\/code> method for centralized tag removal<\/li>\n<li><strong>Improvements<\/strong><\/li>\n<li>Enhanced code documentation with comprehensive PHPDoc comments<\/li>\n<li>Better extensibility for companion plugins and theme integration<\/li>\n<li>Follows WordPress coding standards and best practices<\/li>\n<li>More maintainable code with clear separation of concerns<\/li>\n<li><strong>Compatibility<\/strong><\/li>\n<li>Tested with WordPress 6.8.3<\/li>\n<li>Compatible with PHP 7.4, 8.0, 8.1, 8.2, 8.3<\/li>\n<li>Works with all major themes, page builders, and SEO plugins<\/li>\n<li><strong>Migration Notes<\/strong><\/li>\n<li>No breaking changes - fully backward compatible with 2.0.4<\/li>\n<li>Recommended: Clear and regenerate static files for cleanest output (<code>wp scw clear &amp;&amp; wp scw enable<\/code>)<\/li>\n<li>Optional: Review new hooks for customization opportunities<\/li>\n<\/ul>\n\n<h4>2.0.4<\/h4>\n\n<ul>\n<li><strong>Major WordPress.org Compliance &amp; Refactor Release<\/strong><br \/>\nThis update brings the plugin fully in line with current WordPress.org Plugin Directory requirements and coding standards. Nearly every internal file, reference, and namespace was audited, renamed, or rewritten for long-term maintainability and compliance.<\/li>\n<li><strong>Plugin slug, text domain, and directory renamed<\/strong> from <code>static-cache-generator<\/code> \u2192 <code>static-cache-wrangler<\/code> to meet naming and trademark guidelines.<\/li>\n<li><strong>All file, class, and function prefixes<\/strong> updated from <code>STCG<\/code> \u2192 <code>STCW<\/code> for consistent 4-character namespace compliance.<\/li>\n<li><strong>Text domain and translation calls<\/strong> unified across all PHP files for proper i18n validation.<\/li>\n<li><strong>Folder structure and includes<\/strong> modernized for autoloading consistency and WP.org scanning compatibility.<\/li>\n<li><strong>Admin interface and view templates<\/strong> refactored for cleaner markup and translation readiness.<\/li>\n<li><strong>CLI namespace and command base<\/strong> confirmed as <code>scw<\/code> (formerly <code>scg<\/code>) with backward compatibility removed for clarity.<\/li>\n<li><strong>All GitHub and asset references<\/strong> updated to reflect the new canonical project name and repository.<\/li>\n<li><strong>Packaging and distribution scripts<\/strong> updated for compliance (clean <code>.zip<\/code> exports excluding dev files).<\/li>\n<li><strong>BREAKING CHANGE:<\/strong> Sites upgrading from earlier builds must <strong>deactivate the old \u201cStatic Cache Generator\u201d plugin, delete it, and install\/activate \u201cStatic Cache Wrangler.\u201d<\/strong>\nData and generated files can be safely regenerated once activated.<\/li>\n<\/ul>\n\n<h4>2.0.3<\/h4>\n\n<ul>\n<li><strong>WordPress.org Compliance Update<\/strong><\/li>\n<li>Changed all PHP prefixes from SCG_ to STCW_ (4+ character requirement)<\/li>\n<li>Properly enqueued all scripts and styles (removed inline code)<\/li>\n<li>Extracted CSS to admin\/css\/admin-style.css<\/li>\n<li>Extracted JavaScript to admin\/js\/admin-script.js and includes\/js\/auto-process.js<\/li>\n<li>WP-CLI commands unchanged for user convenience (still <code>wp scw<\/code>)<\/li>\n<li><strong>BREAKING CHANGE:<\/strong> Requires clearing and regenerating static files after update<\/li>\n<li>All option names changed (scw_enabled \u2192 stcw_enabled, etc.)<\/li>\n<li>All WordPress hooks changed (scw_process_assets \u2192 stcw_process_assets, etc.)<\/li>\n<li>See full migration guide on GitHub for technical details<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Enhanced stability and performance<\/li>\n<li>Improved CLI feedback and logging<\/li>\n<li>Refined asset handling and path rewriting<\/li>\n<li>Clean uninstall now clears all options, transients, and cron events<\/li>\n<li>Minor UI and accessibility improvements<\/li>\n<\/ul>\n\n<h4>2.0<\/h4>\n\n<ul>\n<li>Complete rewrite with modern coding standards<\/li>\n<li>WP_Filesystem support for all operations<\/li>\n<li>Stronger security and sanitization<\/li>\n<li>Modern admin UI with real-time asset tracking<\/li>\n<li>Full WP-CLI integration<\/li>\n<li>Fixed Plugin Check and PHPCS compliance<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Export your WordPress site as a static HTML website \u2014 fast, secure, and offline-ready with WP-CLI support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/256747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=256747"}],"author":[{"embeddable":true,"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/derickschaefer"}],"wp:attachment":[{"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=256747"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=256747"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=256747"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=256747"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=256747"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fa-af.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=256747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}