{"id":376846,"date":"2026-09-30T07:41:18","date_gmt":"2026-09-30T07:41:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wext-static-publisher\/"},"modified":"2026-09-30T07:40:41","modified_gmt":"2026-09-30T07:40:41","slug":"wext-static-publisher","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wext-static-publisher\/","author":20954716,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.3.0","stable_tag":"3.3.0","tested":"7.1.2","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Wext Static Publisher","header_author":"Wext Static Publisher Contributors","header_description":"Exports WordPress sites to static files, offers Headless CMS mode, and publishes to your own Cloudflare Workers account.","assets_banners_color":"","last_updated":"2026-09-30 07:40:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/ahmetcigsar\/Wext-Static-Publisher","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":56,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"3.3.0":{"tag":"3.3.0","author":"ahmetcigsar","date":"2026-09-30 07:40:41","revision":3720567}},"upgrade_notice":{"3.3.0":"<p>Moves exports and logs into private database storage and removes error-display overrides. Existing ZIPs are imported; original files remain as backups. Plan database capacity before updating large sites.<\/p>","3.2.1":"<p>Updates export storage validation, asset enqueueing, language-pack loading, and legacy migration for directory review.<\/p>","3.2.0":"<p>Adds SmartCrawl SEO integration and fixes disabled SEO output settings being re-enabled on save.<\/p>","3.1.0":"<p>Update the existing Wext Static Publisher installation in place. Saved settings and export archives remain available.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["3.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3720567,"resolution":"1","location":"assets","locale":"","width":2814,"height":1370},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3720567,"resolution":"2","location":"assets","locale":"","width":2832,"height":1722},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3720567,"resolution":"3","location":"assets","locale":"","width":2820,"height":1866},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3720567,"resolution":"4","location":"assets","locale":"","width":2814,"height":2034},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3720567,"resolution":"5","location":"assets","locale":"","width":2818,"height":2336}},"screenshots":{"1":"Main dashboard showing publishing status and the latest static build.","2":"Deploy setup for a Cloudflare account owned by the site administrator.","3":"Static Site settings with Headless CMS and multilingual options.","4":"SEO plugin integrations and static output controls.","5":"Hide settings for WordPress paths and traces in static output."}},"plugin_section":[],"plugin_tags":[3882,1859,167388,10757,250566],"plugin_category":[59],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-376846","plugin","type-plugin","status-publish","hentry","plugin_tags-cloudflare","plugin_tags-export","plugin_tags-headless-cms","plugin_tags-sftp","plugin_tags-static-site","plugin_category-utilities-and-tools","plugin_committers-ahmetcigsar"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/wext-static-publisher.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/wext-static-publisher\/assets\/screenshot-1.png?rev=3720567","caption":"Main dashboard showing publishing status and the latest static build."},{"src":"https:\/\/ps.w.org\/wext-static-publisher\/assets\/screenshot-2.png?rev=3720567","caption":"Deploy setup for a Cloudflare account owned by the site administrator."},{"src":"https:\/\/ps.w.org\/wext-static-publisher\/assets\/screenshot-3.png?rev=3720567","caption":"Static Site settings with Headless CMS and multilingual options."},{"src":"https:\/\/ps.w.org\/wext-static-publisher\/assets\/screenshot-4.png?rev=3720567","caption":"SEO plugin integrations and static output controls."},{"src":"https:\/\/ps.w.org\/wext-static-publisher\/assets\/screenshot-5.png?rev=3720567","caption":"Hide settings for WordPress paths and traces in static output."}],"raw_content":"<!--section=description-->\n<p>Wext Static Publisher exports complete sites, rewrites URLs, creates ZIP archives, and deploys directly to a user's own Cloudflare account. Headless CMS mode blocks the WordPress theme front end for visitors while signed export requests preserve the theme design in the static site. It includes directory-based multilingual routing with English as the default for new installations, integrations for Rank Math, All in One SEO, SEOPress, SureRank SEO, The SEO Framework, Yoast SEO, and SmartCrawl SEO, SFTP deployment, archive management, WP-CLI, and CI endpoints protected by WordPress Application Passwords. All features are free and open source.<\/p>\n\n<p>Static search runs locally in the visitor's browser with configurable fields, ranking weights, and typo tolerance. No search service account is required.<\/p>\n\n<p>English is the default interface language. Available WordPress.org language packs follow the selected WordPress administrator locale. Translations are distributed separately through translate.wordpress.org.<\/p>\n\n<p>The plugin's original code is MIT licensed. Bundled third-party components keep their own licenses; see THIRD-PARTY-NOTICES.txt and their included license files.<\/p>\n\n<p>The human-readable source code and packaging instructions are available at https:\/\/github.com\/ahmetcigsar\/Wext-Static-Publisher .<\/p>\n\n<h3>External services<\/h3>\n\n<p>Cloudflare connection and deployment are optional. When you connect your own Cloudflare account and deploy, the plugin sends your account ID, API token, Worker configuration, and generated static assets directly to Cloudflare. See Cloudflare's terms and privacy policy: https:\/\/www.cloudflare.com\/website-terms\/ and https:\/\/www.cloudflare.com\/privacypolicy\/ . ZIP export and local static search do not require a Cloudflare account.<\/p>\n\n<p>IndexNow is optional. When enabled, a completed export sends the public site hostname, IndexNow key and key location, and the URLs of changed or removed pages to https:\/\/api.indexnow.org\/indexnow so participating search engines can discover updates. See https:\/\/www.indexnow.org\/terms for its terms and privacy information.<\/p>\n\n<p>The GitHub deployment webhook is optional. If configured, the plugin sends the configured bearer token, export job ID, and build SHA-256 checksum to the webhook URL chosen by the site administrator. For GitHub repository dispatch, see GitHub's terms and privacy statement: https:\/\/docs.github.com\/en\/site-policy\/github-terms\/github-terms-of-service and https:\/\/docs.github.com\/en\/site-policy\/privacy-policies\/github-general-privacy-statement .<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Copy the <code>wext-static-publisher<\/code> directory to <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin in WordPress.<\/li>\n<li>Set the public site URL on the Wext Static Publisher admin page.<\/li>\n<li>Under Deploy &gt; Cloudflare, connect your own Account ID and an API token with Workers Scripts Write permission.<\/li>\n<li>Configure a <code>workers.dev<\/code> subdomain or custom domain in Cloudflare, then export and deploy the static site.<\/li>\n<\/ol>\n\n<p>Export assets, ZIP archives, and activity logs are stored in a private, per-site database table. Downloads require WordPress authorization. The plugin does not write exported HTML, JavaScript, ZIP archives, or web-server rules to the filesystem. ZIP downloads use streaming, uncompressed ZIP entries. Allow database capacity for assets and archives; the archive retention setting controls completed exports.<\/p>\n\n<p>Existing Wext Static Publisher installations can update in place. Saved settings are preserved. Earlier ZIP archives are imported into database storage without extracting files to disk; ZipArchive is required only for that import. Original uploads files remain untouched as backups. Once the imported exports have been verified, the administrator can remove the old plugin export directories through their hosting file manager.<\/p>\n\n<!--section=changelog-->\n<h4>3.3.0<\/h4>\n\n<ul>\n<li>Store static assets, archives, and activity logs in a private per-site database table.<\/li>\n<li>Stream ZIP downloads and SFTP uploads without creating local export files.<\/li>\n<li>Read Cloudflare deployment assets and configuration directly from database storage.<\/li>\n<li>Preserve PHP and WordPress error reporting settings.<\/li>\n<li>Import previous ZIP archives without extracting them to disk.<\/li>\n<\/ul>\n\n<h4>3.2.1<\/h4>\n\n<ul>\n<li>Render exported script and stylesheet references through WordPress asset queues.<\/li>\n<li>Use standard WordPress language packs instead of bundled translations.<\/li>\n<li>Wait for the administrator to deactivate the legacy plugin before migrating.<\/li>\n<li>Reject unsafe export paths, symbolic links, and server-executable file types.<\/li>\n<li>Store new export artifacts in the plugin-specific uploads directory with Apache\/IIS access protection.<\/li>\n<\/ul>\n\n<h4>3.2.0<\/h4>\n\n<ul>\n<li>Detect SmartCrawl SEO automatically and add independent metadata, Schema, sitemap, and robots.txt output controls.<\/li>\n<li>Preserve SmartCrawl SEO output and rewrite internal URLs to the public static domain.<\/li>\n<li>Export SmartCrawl sitemap stylesheets as static XSL files and adapt Schema SearchAction to static search.<\/li>\n<li>Fix unchecked SEO output settings being re-enabled by repeated WordPress sanitization.<\/li>\n<li>Add SmartCrawl integration tests and a persistent local WordPress Playground setup.<\/li>\n<\/ul>\n\n<h4>3.1.0<\/h4>\n\n<ul>\n<li>Keep the Wext Static Publisher installation directory and translation domain consistent with the public name.<\/li>\n<li>Replace the bundled Apache-licensed search library with an MIT-licensed browser search script.<\/li>\n<li>Add WordPress.org screenshots and directory metadata.<\/li>\n<\/ul>","raw_excerpt":"Export WordPress sites to static files, use Headless CMS mode, and deploy to your own Cloudflare Workers account.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/376846","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=376846"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ahmetcigsar"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=376846"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=376846"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=376846"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=376846"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=376846"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=376846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}