Title: Majed Static Export
Author: Majed Bannani
Published: <strong>October 3, 2026</strong>
Last modified: October 3, 2026

---

Search plugins

![](https://ps.w.org/majed-static-export/assets/banner-772x250.png?rev=3726656)

![](https://ps.w.org/majed-static-export/assets/icon-256x256.png?rev=3726656)

# Majed Static Export

 By [Majed Bannani](https://profiles.wordpress.org/majedbannani/)

[Download](https://downloads.wordpress.org/plugin/majed-static-export.0.3.7.zip)

 * [Details](https://wordpress.org/plugins/majed-static-export/#description)
 * [Reviews](https://wordpress.org/plugins/majed-static-export/#reviews)
 *  [Installation](https://wordpress.org/plugins/majed-static-export/#installation)
 * [Development](https://wordpress.org/plugins/majed-static-export/#developers)

 [Support](https://wordpress.org/support/plugin/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

 *   [ Majed Bannani ](https://profiles.wordpress.org/majedbannani/)

[Translate “Majed Static Export” into your language.](https://translate.wordpress.org/projects/wp-plugins/majed-static-export)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/majed-static-export/),
check out the [SVN repository](https://plugins.svn.wordpress.org/majed-static-export/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/majed-static-export/)
by [RSS](https://plugins.trac.wordpress.org/log/majed-static-export/?limit=100&mode=stop_on_copy&format=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.

## Meta

 *  Version **0.3.7**
 *  Last updated **19 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 8.0 or higher **
 * Tags
 * [export](https://wordpress.org/plugins/tags/export/)[local](https://wordpress.org/plugins/tags/local/)
   [static](https://wordpress.org/plugins/tags/static/)[zip](https://wordpress.org/plugins/tags/zip/)
 *  [Advanced View](https://wordpress.org/plugins/majed-static-export/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/majed-static-export/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/majed-static-export/reviews/)

## Contributors

 *   [ Majed Bannani ](https://profiles.wordpress.org/majedbannani/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/majed-static-export/)