{"id":305672,"date":"2026-05-10T20:33:17","date_gmt":"2026-05-10T20:33:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/html-page-publisher\/"},"modified":"2026-05-17T14:55:25","modified_gmt":"2026-05-17T14:55:25","slug":"html-page-publisher","status":"publish","type":"plugin","link":"https:\/\/nb.wordpress.org\/plugins\/html-page-publisher\/","author":23084196,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.2.0","stable_tag":"1.2.0","tested":"6.9.4","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"HTML Page Publisher","header_author":"Hossein Karami","header_description":"Upload standalone HTML files (including AI-generated pages from Claude Design, ChatGPT, Gemini, v0, Bolt) and publish them as landing pages at a configurable URL. Optional subdomain routing.","assets_banners_color":"7c7baa","last_updated":"2026-05-17 14:55:25","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/buymeacoffee.com\/hosseinkarami?utm_source=wordpress.org&utm_medium=plugin-page&utm_campaign=donate&utm_content=readme-donate","header_plugin_uri":"https:\/\/github.com\/HosseinKarami\/html-page-publisher","header_author_uri":"https:\/\/hosseinkarami.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":146,"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":"hosseinkarami","date":"2026-05-10 20:32:45"},"1.1.0":{"tag":"1.1.0","author":"hosseinkarami","date":"2026-05-10 23:03:01"},"1.2.0":{"tag":"1.2.0","author":"hosseinkarami","date":"2026-05-17 14:55:25"}},"upgrade_notice":{"1.2.0":"<p>Edit published pages and manage their images right in the dashboard, with version history and one-click restore. Fully backward-compatible.<\/p>","1.1.0":"<p>Branded admin footer, contextual Help tab, refreshed UI, and donate\/support links. Fully backward-compatible.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3528012,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3528012,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3528012,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3528012,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3528012,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250},"banner.svg":{"filename":"banner.svg","revision":3528012,"resolution":false,"location":"assets","locale":false}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0","1.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3528081,"resolution":"1","location":"assets","locale":"","width":3456,"height":2210},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3528081,"resolution":"2","location":"assets","locale":"","width":3456,"height":2034}},"screenshots":{"1":"Upload new page and list existing pages.","2":"Settings page for URL prefix and optional subdomain."}},"plugin_section":[],"plugin_tags":[2353,216196,229563,246,808],"plugin_category":[],"plugin_contributors":[236828],"plugin_business_model":[],"class_list":["post-305672","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-chatgpt","plugin_tags-claude","plugin_tags-html","plugin_tags-landing-page","plugin_contributors-hosseinkarami","plugin_committers-hosseinkarami"],"banners":{"banner":"https:\/\/ps.w.org\/html-page-publisher\/assets\/banner-772x250.png?rev=3528012","banner_2x":"https:\/\/ps.w.org\/html-page-publisher\/assets\/banner-1544x500.png?rev=3528012","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/html-page-publisher\/assets\/icon.svg?rev=3528012","icon":"https:\/\/ps.w.org\/html-page-publisher\/assets\/icon.svg?rev=3528012","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/html-page-publisher\/assets\/screenshot-1.png?rev=3528081","caption":"Upload new page and list existing pages."},{"src":"https:\/\/ps.w.org\/html-page-publisher\/assets\/screenshot-2.png?rev=3528081","caption":"Settings page for URL prefix and optional subdomain."}],"raw_content":"<!--section=description-->\n<p>HTML Page Publisher lets you drop a standalone HTML file into WordPress and have it served as a landing page at a clean URL. Works with output from <strong>Claude Design<\/strong> and HTML exported from other AI tools like ChatGPT, Gemini, v0, and Bolt, and with any hand-written static HTML too. Perfect for sales collateral, one-pagers, lead-gen pages, and campaign microsites.<\/p>\n\n<p><strong>Key features<\/strong><\/p>\n\n<ul>\n<li>Simple admin UI: upload one HTML file + its image assets, get a public URL<\/li>\n<li><strong>Built-in HTML editor<\/strong>: edit a published page right in the dashboard with the native WordPress code editor (syntax highlighting), no FTP needed<\/li>\n<li><strong>Version history<\/strong>: every save snapshots the previous version; restore any earlier version with one click (restoring is itself undoable)<\/li>\n<li><strong>Image management<\/strong>: add, replace, or delete a page's images in place \u2014 Replace keeps the original filename so existing references keep working<\/li>\n<li><strong>Automatic cleanup of AI-export wrappers<\/strong>: strips runtime code some AI HTML export tools inject so the published page is pure static HTML<\/li>\n<li><strong>Configurable URL prefix<\/strong>: default <code>\/pages\/your-slug\/<\/code>, change to anything you like (e.g. <code>\/resources\/<\/code>, <code>\/guides\/<\/code>)<\/li>\n<li><strong>Optional subdomain routing<\/strong>: point <code>sales.example.com<\/code> at your site and pages appear at <code>sales.example.com\/your-slug\/<\/code><\/li>\n<li><strong>Secure by default<\/strong>: nonce-protected forms, capability checks, path-traversal guards, and strict file-extension filtering<\/li>\n<li><strong>Extensible<\/strong>: use the <code>htmlpp_sanitize_html<\/code> filter to add cleanup rules for other AI export formats<\/li>\n<\/ul>\n\n<p><strong>Use cases<\/strong><\/p>\n\n<ul>\n<li>Publishing landing pages generated by Claude Design<\/li>\n<li>Publishing HTML from ChatGPT, Gemini, v0, Bolt, and other AI tools<\/li>\n<li>Sales collateral (rate cards, one-pagers, proposals)<\/li>\n<li>Campaign landing pages and microsites<\/li>\n<li>Rapid-publishing static HTML without touching the theme or FTP<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>html-page-publisher<\/code> folder to <code>\/wp-content\/plugins\/<\/code> (or install from Plugins \u2192 Add New).<\/li>\n<li>Activate the plugin from the Plugins screen.<\/li>\n<li>Go to <strong>HTML Pages<\/strong> in the admin sidebar to upload your first page.<\/li>\n<li>(Optional) Visit <strong>HTML Pages \u2192 Settings<\/strong> to change the URL prefix or configure a subdomain.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20are%20uploaded%20pages%20stored%3F\"><h3>Where are uploaded pages stored?<\/h3><\/dt>\n<dd><p>In <code>wp-content\/uploads\/html-page-publisher\/&lt;slug&gt;\/<\/code>. Each page has its own directory containing an <code>index.html<\/code> and an <code>assets\/<\/code> folder for images. Version-history snapshots are kept separately in <code>wp-content\/uploads\/html-page-publisher-backups\/&lt;slug&gt;\/<\/code>.<\/p><\/dd>\n<dt id=\"how%20do%20i%20edit%20a%20page%20or%20change%20its%20images%20after%20publishing%3F\"><h3>How do I edit a page or change its images after publishing?<\/h3><\/dt>\n<dd><p>Open <strong>HTML Pages<\/strong>, click <strong>Edit<\/strong> on a page. You get the native WordPress code editor for the HTML, a Version History panel to restore earlier saves, and an Images &amp; Assets panel to add, replace, or delete the page's images without re-uploading the HTML. Use <strong>Replace<\/strong> (rather than uploading a new file) to swap an image while keeping the same filename, so existing <code>assets\/...<\/code> references in your HTML keep working.<\/p><\/dd>\n<dt id=\"can%20i%20lock%20down%20editing%3F\"><h3>Can I lock down editing?<\/h3><\/dt>\n<dd><p>Yes. The standard <code>DISALLOW_FILE_EDIT<\/code> (or <code>DISALLOW_FILE_MODS<\/code>) constant in <code>wp-config.php<\/code> disables in-dashboard HTML editing and image changes here too, the same way it disables WordPress's core file editor.<\/p><\/dd>\n<dt id=\"how%20do%20i%20use%20the%20subdomain%20feature%3F\"><h3>How do I use the subdomain feature?<\/h3><\/dt>\n<dd><p>Two steps:<\/p>\n\n<ol>\n<li><strong>DNS<\/strong>: Add an A or CNAME record pointing your subdomain (e.g. <code>sales.yourdomain.com<\/code>) at the same server as your WordPress site.<\/li>\n<li><strong>Web server<\/strong>: Configure your hosting to serve that subdomain from the same WordPress install. On shared hosting with cPanel this is typically an \"addon domain\" or \"subdomain\" option. On managed hosts, you may need to request it from support.<\/li>\n<\/ol>\n\n<p>Then enter the hostname in <strong>HTML Pages \u2192 Settings \u2192 Subdomain<\/strong>. Pages will be served at <code>https:\/\/sales.yourdomain.com\/your-slug\/<\/code> in addition to the regular prefix URL.<\/p><\/dd>\n<dt id=\"is%20it%20safe%20to%20upload%20arbitrary%20html%3F\"><h3>Is it safe to upload arbitrary HTML?<\/h3><\/dt>\n<dd><p>Only users with the <code>manage_options<\/code> capability (administrators by default) can upload pages. Uploaded HTML is served as-is, including any <code>&lt;script&gt;<\/code> tags it contains, so only upload HTML you trust. The plugin strips known runtime wrappers injected by some AI export tools but does not otherwise filter markup.<\/p><\/dd>\n<dt id=\"will%20uninstalling%20delete%20my%20pages%3F\"><h3>Will uninstalling delete my pages?<\/h3><\/dt>\n<dd><p>No. Uninstalling removes the plugin's settings but leaves the uploaded pages in <code>wp-content\/uploads\/html-page-publisher\/<\/code> (and their version-history snapshots in <code>wp-content\/uploads\/html-page-publisher-backups\/<\/code>) intact. Delete those folders manually if you want to remove them.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20caching%20plugins%20or%20a%20cdn%3F\"><h3>Does this work with caching plugins or a CDN?<\/h3><\/dt>\n<dd><p>Pages are served via a direct PHP readfile that happens before WordPress's main query runs. Most page caches (WP Rocket, W3 Total Cache) won't cache these URLs by default. If you want them cached at the CDN edge, add the URL pattern to your caching rules. They're plain HTML with cache-friendly headers.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: In-browser HTML editor for published pages, using the native WordPress code editor (syntax highlighting). No FTP required.<\/li>\n<li>New: Version history \u2014 every save snapshots the previous version; restore any earlier version with one click, and restoring is itself undoable. Retention is filterable via <code>htmlpp_max_backups<\/code> (default 10).<\/li>\n<li>New: Per-page image management \u2014 add, replace, or delete a page's images in place. Replace overwrites the original filename so existing HTML references keep working.<\/li>\n<li>New: Editing respects <code>DISALLOW_FILE_EDIT<\/code> \/ <code>DISALLOW_FILE_MODS<\/code>, mirroring WordPress's core file-editor lockdown.<\/li>\n<li>Improved: Large or minified files automatically fall back to a plain text editor so the browser stays responsive; the editor is a fixed-height box that scrolls internally.<\/li>\n<li>Security: Editing and image actions reuse the existing nonce, <code>manage_options<\/code>, MIME-whitelist, and realpath path-traversal protections; backups are stored outside the publicly served directory.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: Branded admin footer with author attribution, support, and donate links.<\/li>\n<li>New: Contextual Help tab on plugin admin pages (Overview, FAQ, Support).<\/li>\n<li>New: Settings and Donate links added to the WordPress plugins list (action links and row meta).<\/li>\n<li>Improved: Refreshed hero design with a custom plugin icon.<\/li>\n<li>Improved: Cleaner hero buttons with corner radius matching the rest of the admin UI.<\/li>\n<li>Improved: Settings page icon updated to a clearer sliders icon.<\/li>\n<li>Improved: Help \/ Screen Options bar repositioned below the hero for a cleaner layout.<\/li>\n<li>Improved: Admin footer now flows naturally below content and stays visible on small screens.<\/li>\n<li>Improved: Microcopy cleanup across admin strings.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Upload HTML + image assets via admin UI.<\/li>\n<li>Automatic stripping of AI-export runtime wrappers.<\/li>\n<li>Configurable URL prefix (default <code>\/pages\/<\/code>).<\/li>\n<li>Optional subdomain routing.<\/li>\n<\/ul>","raw_excerpt":"Publish HTML landing pages (including output from Claude Design, ChatGPT, Gemini, v0, and Bolt) at a clean, configurable URL.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/305672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=305672"}],"author":[{"embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/hosseinkarami"}],"wp:attachment":[{"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=305672"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=305672"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=305672"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=305672"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=305672"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/nb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=305672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}