{"id":393951,"date":"2026-11-14T08:43:52","date_gmt":"2026-11-14T08:43:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/subscribe-form-for-listmonk\/"},"modified":"2026-11-14T08:43:30","modified_gmt":"2026-11-14T08:43:30","slug":"subscribe-form-for-listmonk","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/subscribe-form-for-listmonk\/","author":23593955,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.1.4","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Subscribe Form for Listmonk","header_author":"Roland Steinegger (neonnormal)","header_description":"Privacy-friendly subscription forms for the public lists of a self-hosted Listmonk instance, with explicit consent and double opt-in.","last_updated":"2026-11-14 08:43:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/neonnormal.eu\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":70,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"neonnormal","date":"2026-11-14 08:43:30","revision":3801549}},"upgrade_notice":{"1.0.2":"<p>No action is required. Translations are now delivered by WordPress.<\/p>","1.0.1":"<p>The subscribe button now follows your theme&#039;s button style.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"subscribe-form-for-listmonk\/form":{"name":"subscribe-form-for-listmonk\/form","title":"Newsletter signup (Listmonk)"}},"tagged_versions":["1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3801549,"resolution":"1","location":"assets","locale":"","width":1280,"height":1079},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3801549,"resolution":"2","location":"assets","locale":"","width":1280,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3801549,"resolution":"3","location":"assets","locale":"","width":1280,"height":900},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3801549,"resolution":"4","location":"assets","locale":"","width":1280,"height":1181}},"screenshots":{"1":"Subscription form with consent checkbox.","2":"Success message after submitting the form.","3":"Block settings in the editor.","4":"Plugin settings with the public lists loaded from Listmonk."}},"plugin_section":[],"plugin_tags":[24592,131785,226655,455,2482],"plugin_category":[41,42],"plugin_contributors":[292672],"plugin_business_model":[],"class_list":["post-393951","plugin","type-plugin","status-publish","hentry","plugin_tags-double-opt-in","plugin_tags-gdpr","plugin_tags-listmonk","plugin_tags-newsletter","plugin_tags-subscribe","plugin_category-communication","plugin_category-contact-forms","plugin_contributors-neonnormal","plugin_committers-neonnormal"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/subscribe-form-for-listmonk.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/subscribe-form-for-listmonk\/assets\/screenshot-1.png?rev=3801549","caption":"Subscription form with consent checkbox."},{"src":"https:\/\/ps.w.org\/subscribe-form-for-listmonk\/assets\/screenshot-2.png?rev=3801549","caption":"Success message after submitting the form."},{"src":"https:\/\/ps.w.org\/subscribe-form-for-listmonk\/assets\/screenshot-3.png?rev=3801549","caption":"Block settings in the editor."},{"src":"https:\/\/ps.w.org\/subscribe-form-for-listmonk\/assets\/screenshot-4.png?rev=3801549","caption":"Plugin settings with the public lists loaded from Listmonk."}],"raw_content":"<!--section=description-->\n<p>Subscribe Form for Listmonk connects WordPress to a self-hosted <a href=\"https:\/\/listmonk.app\/\">Listmonk<\/a> instance. Enter the address of your Listmonk installation, and the plugin loads its public lists. Place the \"Newsletter signup (Listmonk)\" block on any page, choose a list and optionally override heading and description.<\/p>\n\n<p>No API credentials are required: the plugin only uses Listmonk's public endpoints.<\/p>\n\n<h4>Privacy by design<\/h4>\n\n<ul>\n<li>Consent checkbox that is never preselected, names the newsletter, links to your privacy policy and mentions the right to withdraw.<\/li>\n<li>Double opt-in is handled by Listmonk. The plugin never creates preconfirmed subscriptions.<\/li>\n<li>Only the email address and the selected list are sent to Listmonk. WordPress does not store any addresses.<\/li>\n<li>Rate limiting uses HMAC values only \u2013 no plain addresses or IP addresses are stored.<\/li>\n<li>No external fonts, CAPTCHA services, tracking or telemetry. All assets are served locally.<\/li>\n<li>Without a privacy policy page, no form is shown.<\/li>\n<li>Adds a suggested text to the WordPress privacy policy guide.<\/li>\n<\/ul>\n\n<h4>Safe operation<\/h4>\n\n<ul>\n<li>A list only accepts subscriptions after you enabled subscriptions globally and confirmed that the list uses double opt-in in Listmonk. Listmonk does not publish the opt-in type, so this is a deliberate manual check.<\/li>\n<li>Lists that are removed from Listmonk or made private disappear from the website automatically.<\/li>\n<li>Each page only accepts lists that are actually offered by a block on that page.<\/li>\n<li>Local and development environments never send subscriptions (see the <code>sffl_suppress_delivery<\/code> filter).<\/li>\n<li>Repeated submissions within five minutes are answered like the first one, without triggering a second confirmation email.<\/li>\n<li>Clear success message, protection against double submission and full keyboard and screen reader support.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to a Listmonk server whose address you enter in the plugin settings. Listmonk is self-hosted software; the server is operated by you or on your behalf, not by the plugin author.<\/p>\n\n<ul>\n<li><strong>Loading lists:<\/strong> When you save the settings, click \"Reload lists\" or open the block editor (at most every 12 hours), the plugin requests <code>\/api\/public\/lists<\/code> from your Listmonk server. No personal data is sent.<\/li>\n<li><strong>Subscriptions:<\/strong> When a visitor submits a form, the plugin sends the email address and the UUID of the selected list to <code>\/api\/public\/subscription<\/code> on your Listmonk server. Listmonk then sends the confirmation email.<\/li>\n<\/ul>\n\n<p>Visitors' browsers never connect to Listmonk directly through this plugin. The terms and privacy policy that apply are those of the operator of the Listmonk server. Listmonk project: https:\/\/listmonk.app\/ \u2013 source code and license: https:\/\/github.com\/knadh\/listmonk<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Go to <em>Settings \u2192 Listmonk<\/em>, enter the HTTPS address of your Listmonk instance and save. The public lists are loaded automatically.<\/li>\n<li>In Listmonk, make sure every list you want to offer is public and uses double opt-in. Then tick \"confirmed\" for these lists in WordPress.<\/li>\n<li>Assign a privacy policy page under <em>Settings \u2192 Privacy<\/em> and describe the newsletter processing there.<\/li>\n<li>Enable \"Accept subscriptions\".<\/li>\n<li>Add the \"Newsletter signup (Listmonk)\" block to a page and select a list.<\/li>\n<\/ol>\n\n<p>Recommended Listmonk settings: record the opt-in IP address (proof of consent), keep individual tracking disabled, allow subscribers to unsubscribe, export and wipe their data, and keep the unsubscribe link in all templates.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20listmonk%20api%20user%3F\"><h3>Do I need a Listmonk API user?<\/h3><\/dt>\n<dd><p>No. The plugin uses the public list and subscription endpoints of Listmonk.<\/p><\/dd>\n<dt id=\"why%20do%20i%20have%20to%20confirm%20double%20opt-in%20manually%3F\"><h3>Why do I have to confirm double opt-in manually?<\/h3><\/dt>\n<dd><p>Listmonk's public API does not reveal whether a list uses single or double opt-in. To prevent subscriptions without confirmation, each list must be confirmed once in the plugin settings.<\/p><\/dd>\n<dt id=\"can%20i%20use%20several%20lists%20on%20one%20page%3F\"><h3>Can I use several lists on one page?<\/h3><\/dt>\n<dd><p>Yes. Add one block per list. Each block has its own form.<\/p><\/dd>\n<dt id=\"why%20does%20my%20local%20test%20site%20not%20subscribe%20anyone%3F\"><h3>Why does my local test site not subscribe anyone?<\/h3><\/dt>\n<dd><p>To protect real addresses, subscriptions are suppressed when <code>wp_get_environment_type()<\/code> returns <code>local<\/code> or <code>development<\/code>. The forms are still shown for previews. Developers can change this with the <code>sffl_suppress_delivery<\/code> filter.<\/p><\/dd>\n<dt id=\"how%20can%20my%20theme%20change%20the%20colours%3F\"><h3>How can my theme change the colours?<\/h3><\/dt>\n<dd><p>Set the CSS custom properties <code>--sffl-accent<\/code>, <code>--sffl-error<\/code>, <code>--sffl-surface<\/code>, <code>--sffl-surface-muted<\/code> and <code>--sffl-text<\/code>. Without them, the plugin falls back to your theme's colour presets.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Let WordPress load translations, so they can be provided through translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>The subscribe button uses the theme's button style (<code>wp-element-button<\/code>).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release.<\/li>\n<\/ul>","raw_excerpt":"Privacy-friendly newsletter signup blocks for the public lists of your self-hosted Listmonk \u2013 with explicit consent and double opt-in.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/393951","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=393951"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/neonnormal"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=393951"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=393951"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=393951"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=393951"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=393951"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=393951"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}