{"id":367188,"date":"2026-09-21T13:31:48","date_gmt":"2026-09-21T13:31:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/content2html\/"},"modified":"2026-09-21T13:31:16","modified_gmt":"2026-09-21T13:31:16","slug":"elbutschitos-html-publisher","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/elbutschitos-html-publisher\/","author":20526723,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Elbutschitos HTML Publisher","header_author":"elbutschito","header_description":"Use WordPress as a headless CMS without building a WordPress theme. Upload your HTML template, define your own injection points, and publish the result as a static website.","assets_banners_color":"","last_updated":"2026-09-21 13:31:16","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ub-internetberatung.de","header_author_uri":"https:\/\/profiles.wordpress.org\/elbutschito\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":61,"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":"elbutschito","date":"2026-09-21 13:31:16","revision":3705672}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Content tab - choose post types, upload a template, add per-page alternative templates, and manage the assets (CSS\/JS\/fonts\/images) bundle.","2":"Deployment target tab - configure an SFTP host (password or private key authentication) or switch to Netlify.","3":"Forms tab - enable working contact forms on the static site, with recipient email, thank-you page, honeypot spam protection, and a custom form target option."}},"plugin_section":[],"plugin_tags":[167388,169166,10757,274858,250566],"plugin_category":[],"plugin_contributors":[281847],"plugin_business_model":[],"class_list":["post-367188","plugin","type-plugin","status-publish","hentry","plugin_tags-headless-cms","plugin_tags-netlify","plugin_tags-sftp","plugin_tags-static-export","plugin_tags-static-site","plugin_contributors-elbutschito","plugin_committers-elbutschito"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/elbutschitos-html-publisher.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Elbutschitos HTML Publisher generates a fully static HTML export of your WordPress posts and pages, using WordPress purely as a headless content source, and pushes the result to a deployment target of your choice: Netlify or any standard SFTP host.<\/p>\n\n<p><strong>Core features<\/strong><\/p>\n\n<ul>\n<li><strong>Template-driven generation<\/strong> - use your own HTML template with simple <code>###placeholder###<\/code> markers (title, content, date, author, and any custom field via a flexible field-mapping syntax). Assign a different template per post or page when needed.<\/li>\n<li><strong>Two deployment targets<\/strong> - upload over SFTP (password or private key authentication) to any web host, or deploy straight to Netlify via its API. Batch transfer with progress feedback, or push a single page at a time from the post editor.<\/li>\n<li><strong>Automatic URL rewriting<\/strong> - internal links and media URLs are automatically rewritten to root-relative paths, with additional custom find-and-replace rules available for anything else (old domains, CDN paths, and so on).<\/li>\n<li><strong>Working contact forms on a static site<\/strong> - forms keep working after export. On Netlify, forms are automatically wired up for Netlify Forms. On SFTP targets, a small bundled PHP handler emails submissions, with spam-honeypot protection and lightweight client-side validation (required fields, email format) that needs no configuration for accessibility-friendly form markup.<\/li>\n<li><strong>Navigation from a WordPress menu<\/strong> - keep your designer's existing, fully styled navigation markup and let the plugin fill it with the real menu structure from a WordPress menu (multi-level menus supported), instead of maintaining two separate navigations by hand.<\/li>\n<li><strong>Markdown export<\/strong> - export all content as plain <code>.md<\/code> files with YAML front matter, optionally bundling and localizing referenced images, for use with static-site generators such as Hugo, Jekyll, or Eleventy, or for archiving in a note-taking tool.<\/li>\n<li><strong>HTML cleanup rules<\/strong> - remove WordPress-only CSS classes, strip or change arbitrary attributes via simple selector-based rules, and inject custom per-post data into the template.<\/li>\n<\/ul>\n\n<p>Elbutschitos HTML Publisher is aimed at agencies and developers who want the editorial convenience of WordPress combined with the speed, security, and low hosting cost of a static site.<\/p>\n\n<h4>Bundled libraries<\/h4>\n\n<p>This plugin bundles the following third-party, MIT-licensed libraries so that no separate <code>composer install<\/code> step is required:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/phpseclib\/phpseclib\">phpseclib<\/a> (3.x) - SFTP support<\/li>\n<li><a href=\"https:\/\/github.com\/paragonie\/constant_time_encoding\">paragonie\/constant_time_encoding<\/a> - runtime dependency of phpseclib<\/li>\n<li><a href=\"https:\/\/github.com\/thephpleague\/html-to-markdown\">league\/html-to-markdown<\/a> - Markdown export<\/li>\n<li><a href=\"https:\/\/sourceforge.net\/projects\/simplehtmldom\/\">simplehtmldom<\/a> - HTML parsing\/manipulation used throughout the generator<\/li>\n<\/ul>\n\n<p>All are MIT-licensed and compatible with this plugin's GPLv2-or-later license. See the LICENSE.txt file for the full plugin license text and the <code>vendor\/<\/code> subfolders for each library's own license.<\/p>\n\n<h4>External services<\/h4>\n\n<p>This plugin only contacts external services that you explicitly configure and trigger yourself:<\/p>\n\n<ul>\n<li><strong>Netlify<\/strong> - if you configure a Netlify site and click \"Deploy\" (or \"Test connection\"), the plugin sends your generated site files (and, for the connection test, a simple API request) to the Netlify API (<code>https:\/\/api.netlify.com<\/code>), authenticated with the access token you provide. This happens only when you actively trigger a deploy or connection test - never automatically or in the background. <a href=\"https:\/\/www.netlify.com\/legal\/terms-of-use\/\">Terms of Service<\/a>, <a href=\"https:\/\/www.netlify.com\/privacy\/\">Privacy Policy<\/a>.<\/li>\n<li><strong>Your own SFTP host<\/strong> - if you configure an SFTP target, the plugin connects to the host you specify to upload files, using the credentials you provide. This is a server of your own choosing, not a service operated by this plugin's author.<\/li>\n<\/ul>\n\n<p>No data is sent anywhere without an explicit action from you, and no usage tracking or analytics of any kind is built into this plugin.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/content2html<\/code> directory, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to \"HTML Publisher\" in the admin menu to configure a template, choose a deployment target (SFTP or Netlify), and set up any optional features (forms, navigation, Markdown export).<\/li>\n<li>Optional but recommended: define <code>CONTENT2HTML_ENCRYPTION_KEY<\/code> in <code>wp-config.php<\/code> before entering SFTP\/Netlify credentials, so stored secrets are encrypted with a key that isn't stored in the database itself.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20wordpress%20on%20my%20live%20site%3F\"><h3>Does this replace WordPress on my live site?<\/h3><\/dt>\n<dd><p>No. WordPress keeps running as your editorial backend. Visitors are served the generated static files instead, from Netlify or your SFTP host.<\/p><\/dd>\n<dt id=\"does%20my%20hosting%20need%20to%20run%20php%20for%20the%20static%20site%20to%20work%3F\"><h3>Does my hosting need to run PHP for the static site to work?<\/h3><\/dt>\n<dd><p>Only if you use SFTP as a target and want the built-in contact-form handler to work, since that handler is a small PHP script. Everything else (the static pages themselves) is plain HTML and works on any static host. Netlify deployments do not require PHP at all, including for forms.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20forms%20after%20export%3F\"><h3>What happens to my forms after export?<\/h3><\/dt>\n<dd><p>See the \"Working contact forms on a static site\" feature above - forms are automatically rewired to either Netlify Forms or a bundled PHP mail handler, depending on your chosen target.<\/p><\/dd>\n<dt id=\"can%20i%20keep%20my%20own%20hand-built%20navigation%20instead%20of%20generating%20it%20from%20a%20wordpress%20menu%3F\"><h3>Can I keep my own hand-built navigation instead of generating it from a WordPress menu?<\/h3><\/dt>\n<dd><p>Yes. The navigation feature is opt-in per navigation (main\/footer) and does nothing unless explicitly enabled.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release: template-based static generation, SFTP and Netlify deployment, automatic and custom URL rewriting, per-post templates, working contact forms (Netlify Forms \/ PHP mail handler), WordPress-menu-driven navigation, Markdown export, HTML cleanup rules.<\/li>\n<\/ul>","raw_excerpt":"Use WordPress as a headless CMS. Upload your own HTML template, define injection points, publish a static website.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/367188","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=367188"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/elbutschito"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=367188"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=367188"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=367188"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=367188"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=367188"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=367188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}