Majed Static Export

Description

Discovers published public content types, taxonomy archives and linked pagination. Fetches anonymous rendered responses, collects common HTML and CSS dependencies, rewrites local URLs and packages the result. On a local WordPress site, a supported browser can instead save the exact generated file structure into a folder selected by the administrator, without creating a ZIP. Register each form manually: name, public page URL and unique form ID or CSS selector. Verify the match and fields, then choose Formspree and save its endpoint URL. Only registered forms are changed. Legacy automatic inventory rules are not imported; register intended contact forms again. Settings are frozen when each export starts; changes require a new export.

Requirements and scope

PHP DOM (form verification), MySQL/MariaDB named locks, writable private system temporary directory outside WordPress, and anonymous HTTP access to the site’s own public URLs are required. ZIP exports also require PHP ZipArchive. Local-folder export is deliberately available only when WordPress itself runs locally; it requires a Chromium-based browser with the File System Access API from localhost, HTTPS, or another trusted local address. It is unavailable for sites running on a hosted server. Self-signed certificates, HTTP authentication and blocked loopback requests need server configuration; this release does not bypass them.

Up to 10,000 URLs, 32 MB per source response, one job per site. The last successful export remains available during a new attempt. It is deleted only after the replacement ZIP passes verification. Abandoned unfinished attempts expire after 24 hours without progress; hourly WP-Cron cleanup requires site traffic. A manual Delete export files button removes the generated files and cancels the current attempt. Failed filesystem deletions are reported and retried; only registered plugin-owned temporary directories are visited. Download promptly: system temporary-file cleanup can expire an export. Export records remain after plugin removal; this release has no uninstall data deletion routine.

This is a public rendered snapshot, not a PHP or database backup. Media must be discovered through supported page/CSS references; the entire media library is not copied. Unlinked runtime assets, JavaScript-created forms, computed JavaScript URLs, external assets, query-string content variants, AJAX filtering, search, booking availability, carts, logins and payments require separate integrations. Choosing types controls individually discovered records; archive/homepage output remains the HTML served by WordPress and can mention other content types.

Formspree delivery supports ordinary named text/email/telephone/number/date fields, textareas, selects and choices. Configure an HTTPS formspree.io/f/ endpoint per registered form, plus an optional subject. Hidden fields and WordPress internal actions are excluded except supported CAPTCHA response tokens; password/file forms are blocked. Multi-step forms, dynamic widgets, arbitrary JSON endpoints and FormSubmit are not supported in this release. The browser navigates to Formspree for its verification and result; this is not an AJAX success-message integration. JavaScript is required. Standard submit/click events are intercepted. Custom JavaScript that directly sends requests requires an adapter and review. WordPress REST discovery markup may generate conservative dynamic-dependency warnings. Warnings are capped at 300 entries. There is no guaranteed offline completeness for arbitrary themes and plugins.

Bricks Builder and JetEngine are not certified by this release. Server-rendered public output is the target; test a representative site before deployment. A ZIP can be structurally valid while still containing interactions that need a backend.

Translations

English source strings and POT are included. Arabic PO/MO are supplied separately. Place majed-static-export-ar.mo in wp-content/languages/plugins/ or import the PO through your translation workflow. The administrator locale controls the interface; the site locale controls exported form notices.

Privacy

No analytics. Form delivery is disabled by default. When the site owner explicitly configures Formspree and a visitor submits the exported form, its supported field values, configured subject, reply-to address and anti-spam options go directly from the browser to https://formspree.io/. No form data is sent by verification, saving settings or generating a ZIP. The public Formspree endpoint is embedded in the exported HTML; recipient settings and secret keys belong in the Formspree dashboard. Providers are independent and we do not guarantee their prices, limits, privacy policies or continued availability. Review https://help.formspree.io/ and the privacy link on https://formspree.io/ before enabling it. Export HTTP requests go to the source site and referenced font/CSS providers. Referenced font files and external CSS (including Google Fonts CSS endpoints) are downloaded into the ZIP and rewritten to local paths. External requests use WordPress safe HTTP validation with TLS verification, no cookies, and validated redirects. Other external assets remain external and are reported. Unavailable fonts cause an incomplete export. The optional support link opens PayPal only when clicked. The report contains source URLs and form IDs and is downloaded separately from the public site ZIP.

Installation

  1. Upload majed-static-export-0.3.7.zip through Plugins > Add New > Upload Plugin.
  2. Activate the plugin and open Static Export.
  3. Enable pretty permalinks, choose public content types and set the target mount (/ for a domain root, /travel/ for a subdirectory).
  4. Choose ZIP, or choose Local folder when WordPress itself is running locally. Keep the screen open; use Pause and Resume when needed.
  5. Review errors, forms and warnings. Download the ZIP, or after a local-folder export choose the destination folder in your browser. Download the separate JSON report when needed.
  6. Extract the website ZIP, or use the saved local-folder output, in the chosen mount on a static web server. Opening index.html with file:// is not supported.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Majed Static Export” is open source software. The following people have contributed to this plugin.

Contributors

Translate “Majed Static Export” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

0.3.7

Register and enqueue the exported form script through WordPress APIs in an isolated per-document script queue. Preserve the active WordPress queue and static subdirectory paths.

0.3.6

Replace FormSubmit delivery with validated Formspree endpoints. Existing FormSubmit rules require reconfiguration. Forward CAPTCHA response tokens without forwarding WordPress hidden fields.

0.3.5

Decode WordPress emoji JSON and Bricks localized JSON assignments to export dynamically referenced scripts and rewrite source URLs. Backend endpoints become unavailable same-origin paths with review warnings; AJAX is not implemented by this change. Audit textual output for unhandled source URLs and stop incomplete exports. Remove sourceURL debugging comments.

0.3.4

Add a local-folder export destination for local WordPress environments. The export keeps the same staged file structure, skips ZIP creation, and lets a supported browser save it into an administrator-selected folder.

0.3.3

Recover migrated font URLs from the current uploads directory when their complete uploads-relative path matches an existing local font. Validate real filesystem containment, size and font signature. Preserve external URLs with content-changing query parameters. Report recovered URLs without changing source content.

0.3.2

Bundle referenced external fonts and stylesheets, including Google Fonts CSS. Preserve query variants with collision-free local paths, support font filenames containing spaces, validate downloaded font signatures, and report inaccessible fonts as failures. Preserve non-bundled external CSS dependencies as absolute URLs.

0.3.1

Do not crawl Cloudflare email-protection links as pages. Preserve their original origin and encoded fragment for the existing email decoder, and report them for review. Other cdn-cgi assets, including images and decoding scripts, remain eligible for export. Generate a new export after updating.

0.3.0

Replace automatic inventory with explicit page and selector registration, verified field previews, individual edit/remove actions and user-bound verification. Revalidate selectors and fields during export. Preserve unregistered forms unchanged. Include the MIT-licensed Symfony CSS Selector component with an isolated namespace.

0.2.1

Move the general external-services notice immediately before the support card and update its wording. WordPress gettext remains the sole translation mechanism; translation files are distributed separately.

0.2.0

Free FormSubmit configuration per registered form, pre-export page scan, external-service disclosure, stable form matching, immutable export settings, native validation and submission interception for static contact forms.

0.1.2

Retain the last successful ZIP until replacement validation, keep previous downloads available during failed/new attempts, clean stale attempts after 24 hours, add manual file cleanup and show saved ZIP date/size.

0.1.1

Preserve JavaScript verbatim to avoid treating concatenated URL fragments as local dependencies. Verified on Store with Bricks: 134 resources exported, zero failures. Computed JavaScript dependencies continue to require review.

0.1.0

Initial ZIP exporter with resumable batches, retry, manifest hashes, form inventory, English/Arabic interface support and scoped administrator access.