{"id":341901,"date":"2026-08-01T16:43:48","date_gmt":"2026-08-01T16:43:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/neutrope-flow\/"},"modified":"2026-10-19T14:39:03","modified_gmt":"2026-10-19T14:39:03","slug":"neutrope-flow","status":"publish","type":"plugin","link":"https:\/\/ml.wordpress.org\/plugins\/neutrope-flow\/","author":23488465,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.7.1","stable_tag":"0.7.1","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Neutrope Flow","header_author":"Neutrope Inc.","header_description":"Manage contacts, tags, and scheduled follow-up emails from Contact Form 7 and WooCommerce events inside WordPress.","assets_banners_color":"062666","last_updated":"2026-10-19 14:39:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":301,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.4.9":{"tag":"0.4.9","author":"neutropeinc","date":"2026-08-01 16:43:27","revision":3631151},"0.7.0":{"tag":"0.7.0","author":"neutropeinc","date":"2026-10-19 12:27:59","revision":3754717},"0.7.1":{"tag":"0.7.1","author":"neutropeinc","date":"2026-10-19 14:39:03","revision":3754999}},"upgrade_notice":{"0.7.1":"<p>Translation loading fix. Existing official translations retain priority; bundled translations fill gaps. Back up before updating and use the standard WordPress plugin update or ZIP overwrite. To roll back this patch, restore the previous plugin files; do not restore an old database over newer user activity. Existing data and delivery settings are not intentionally changed.<\/p>","0.7.0":"<p>Back up files and the database before updating. Digest generation may be held for administrator review; this does not stop existing newsletter sending. Use the standard update, not delete\/reinstall. See &quot;Updating and recovery&quot; below before resuming or restoring. Adds digests and newsletter web versions; new newsletter UTM values change.<\/p>","0.6.0":"<p>Adds double opt-in signup forms and batched newsletters. Four new tables and two new columns are created automatically; existing contacts, sequences, mappings, and delivery behavior are unchanged. Enter a sender postal address in Settings before sending a newsletter.<\/p>","0.4.9":"<p>Adds recipient-free send-time campaign-template snapshots for compatible local reporting extensions. Existing database tables, settings, contacts, sequences, and delivery behavior remain unchanged.<\/p>\n\n<p>Adds opt-in-only Qualification Lab consent tags. No email sequence or delivery is enabled by this update.<\/p>","0.4.8":"<p>WordPress.org review hardening. Existing database tables and saved data remain unchanged.<\/p>","0.4.7":"<p>WordPress.org review update. Requires WordPress 6.2 or later.<\/p>","0.4.6":"<p>WordPress.org readiness update. Internal PHP class names changed; database tables, options, hooks, and saved data remain unchanged.<\/p>","0.4.5":"<p>CSV import only creates or updates contacts and tags. It does not send email, enroll sequences, or change an existing unsubscribe status.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3684441,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3684441,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3684441,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3684441,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"neutrope-flow\/signup-form":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"neutrope-flow\/signup-form","title":"Neutrope Flow Signup Form","category":"widgets","icon":"email-alt","description":"Displays an email signup form with double opt-in.","keywords":["newsletter","signup","subscribe","email"],"textdomain":"neutrope-flow","attributes":{"formId":{"type":"integer","default":0}},"supports":{"html":false,"align":["wide","full"]},"editorScript":"file:.\/editor.js"}},"tagged_versions":["0.4.9","0.7.0","0.7.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3631151,"resolution":"1","location":"assets","locale":"","width":1440,"height":784},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3631151,"resolution":"2","location":"assets","locale":"","width":1440,"height":1752},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3631151,"resolution":"3","location":"assets","locale":"","width":1440,"height":978},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3631151,"resolution":"4","location":"assets","locale":"","width":1440,"height":784},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3631151,"resolution":"5","location":"assets","locale":"","width":1440,"height":933}},"screenshots":{"1":"Dashboard with contact, sequence, and delivery totals plus local environment checks.","2":"Sequence editor showing scheduled steps, email format, message content, and CTA settings.","3":"CSV import preview confirming detected columns and that no email or sequence enrollment will occur.","4":"Contact Form 7 mapping for selecting a form, contact fields, tags, and a sequence.","5":"Settings for the sender address, delivery logging, and optional UTM parameters."}},"plugin_section":[],"plugin_tags":[1152,41888,27370,1034,286],"plugin_category":[45],"plugin_contributors":[264944],"plugin_business_model":[],"class_list":["post-341901","plugin","type-plugin","status-publish","hentry","plugin_tags-contact-form-7","plugin_tags-email-automation","plugin_tags-follow-up-email","plugin_tags-marketing-automation","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-neutropeinc","plugin_committers-neutropeinc"],"banners":{"banner":"https:\/\/ps.w.org\/neutrope-flow\/assets\/banner-772x250.png?rev=3684441","banner_2x":"https:\/\/ps.w.org\/neutrope-flow\/assets\/banner-1544x500.png?rev=3684441","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/neutrope-flow\/assets\/icon-128x128.png?rev=3684441","icon_2x":"https:\/\/ps.w.org\/neutrope-flow\/assets\/icon-256x256.png?rev=3684441","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/neutrope-flow\/assets\/screenshot-1.png?rev=3631151","caption":"Dashboard with contact, sequence, and delivery totals plus local environment checks."},{"src":"https:\/\/ps.w.org\/neutrope-flow\/assets\/screenshot-2.png?rev=3631151","caption":"Sequence editor showing scheduled steps, email format, message content, and CTA settings."},{"src":"https:\/\/ps.w.org\/neutrope-flow\/assets\/screenshot-3.png?rev=3631151","caption":"CSV import preview confirming detected columns and that no email or sequence enrollment will occur."},{"src":"https:\/\/ps.w.org\/neutrope-flow\/assets\/screenshot-4.png?rev=3631151","caption":"Contact Form 7 mapping for selecting a form, contact fields, tags, and a sequence."},{"src":"https:\/\/ps.w.org\/neutrope-flow\/assets\/screenshot-5.png?rev=3631151","caption":"Settings for the sender address, delivery logging, and optional UTM parameters."}],"raw_content":"<!--section=description-->\n<p>Neutrope Flow helps site owners manage contact records, send scheduled follow-up emails, collect newsletter subscribers with double opt-in, and send newsletters from their own WordPress installation.<\/p>\n\n<p>The plugin can create or update a contact after a configured Contact Form 7 submission or WooCommerce order event. A mapping can add tags and enroll the contact in an email sequence. Each sequence contains one or more steps, such as an immediate message followed by messages several days later.<\/p>\n\n<p>A built-in signup form (shortcode or block) collects subscribers with double opt-in: nothing is stored as a contact until the confirmation link in the email is opened. Newsletters are sent to tagged, confirmed contacts in small batches with a configurable hourly limit. A recurring digest can assemble an issue from recent posts on a schedule, and any newsletter can be published as a web page with an archive list.<\/p>\n\n<p>Email is sent through WordPress <code>wp_mail()<\/code>. Neutrope Flow is not an SMTP service or an email delivery provider. Delivery depends on the mail configuration of the WordPress site. Scheduled timing also depends on Action Scheduler or WP-Cron and may not run at an exact time on low-traffic sites.<\/p>\n\n<h4>Main features<\/h4>\n\n<ul>\n<li>Store contact names and email addresses in dedicated WordPress database tables.<\/li>\n<li>Organize contacts with tags.<\/li>\n<li>Create text or simple HTML follow-up email sequences.<\/li>\n<li>Start sequences from configured Contact Form 7 submissions.<\/li>\n<li>Start sequences from configured WooCommerce order events.<\/li>\n<li>Schedule later steps with Action Scheduler when available, with WP-Cron as a fallback.<\/li>\n<li>Add an unsubscribe link and List-Unsubscribe headers to sequence emails.<\/li>\n<li>Skip unsubscribed contacts and prevent duplicate delivery of the same step.<\/li>\n<li>Record delivery results in a local log when logging is enabled.<\/li>\n<li>Import contacts and tags from a UTF-8 CSV file without sending email or enrolling sequences.<\/li>\n<li>Optionally add UTM parameters to eligible CTA links. This option is disabled by default.<\/li>\n<li>Emit a recipient-free campaign-template content snapshot after a successful send for compatible local reporting extensions.<\/li>\n<li>Show a double opt-in signup form with the <code>[neutrope_flow_signup form=\"ID\"]<\/code> shortcode or the \"Neutrope Flow Signup Form\" block. The form works without JavaScript, uses labelled accessible fields, loads no external assets, and protects against spam with a honeypot, a minimum fill time, and per-address and site-wide submission limits.<\/li>\n<li>Send a confirmation email with an expiring token. A contact is created only when the link is opened; a confirmed contact can then be enrolled in a welcome sequence.<\/li>\n<li>Never re-enable an unsubscribed or bounced contact without a new double opt-in.<\/li>\n<li>Create newsletters with a subject, preview text, and simple HTML body; choose the audience by tag; exclude unsubscribed, bounced, and (by default) unconfirmed contacts.<\/li>\n<li>Send a test copy, send now, or schedule a newsletter. Delivery runs in batches through Action Scheduler (or WP-Cron) with a configurable batch size and hourly limit, duplicate protection, and a per-recipient log.<\/li>\n<li>Add the unsubscribe link, List-Unsubscribe headers, the sender name, and the sender postal address to every newsletter. Newsletters cannot be sent until a postal address is entered.<\/li>\n<li>Add UTM parameters to newsletter links, with a per-newsletter campaign value and a per-link content value (the post slug for links to posts on the site).<\/li>\n<li>Create a recurring digest: on a schedule (for example the first Thursday of every month at 09:00 in a chosen timezone), the plugin collects posts published since the previous issue, picks a featured post plus a configurable number of new posts, fills the gap with older posts when you allow it, adds a rotating block (for example a tool spotlight), and creates the issue as a scheduled newsletter. The site owner is notified a configurable number of hours before the send and can edit the issue until it goes out.<\/li>\n<li>Publish any newsletter as a web page at <code>\/newsletter\/{slug}\/<\/code> (base configurable). The page shows the newsletter content only, with <code>noindex, follow<\/code> by default, a canonical URL, and no recipient data or unsubscribe token; emails then include a \"View this email in your browser\" link. List published issues with the <code>[neutrope_flow_newsletter_archive]<\/code> shortcode.<\/li>\n<\/ul>\n\n<h4>External services and tracking<\/h4>\n\n<p>Neutrope Flow does not make outbound API requests, require an API key, or send contact data to Neutrope or another external service.<\/p>\n\n<p>The optional UTM feature only adds parameters to eligible links in outgoing email. It does not connect to Google Analytics or transmit analytics data.<\/p>\n\n<p>Email delivery is handled by the site's WordPress mail configuration. If the site uses an SMTP or transactional email plugin, that plugin may send data to its configured provider under its own terms and privacy policy.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Neutrope Flow stores contact email addresses, names, source information, tags, sequence settings, delivery-log details, and random unsubscribe tokens in the site's WordPress database. It does not store IP addresses and does not send this data to Neutrope.<\/p>\n\n<p>After a successful send, the plugin can notify compatible local extensions with the canonical sequence-step subject, body, format, CTA, send time, and UTM metadata. This campaign-template snapshot excludes the contact ID, recipient email address, recipient name, recipient-rendered body, unsubscribe URL, and delivery-log recipient fields.<\/p>\n\n<p>When the signup form is used, an unconfirmed request (email address, optional name, form reference, random confirmation token, and expiry time) is stored only until the confirmation link is opened or the link expires, after which it is deleted. The date of confirmation is recorded on the contact. Signup rate limiting uses short-lived, salted hashes of the email address; no IP address is read or stored. Newsletter sends record the recipient address and delivery result. The sender name and postal address entered in the settings are shown in every newsletter footer.<\/p>\n\n<p>A newsletter web version is a public page generated from the newsletter content and the sender identity. It never contains a recipient name, email address, or unsubscribe token; the digest feature reads only published posts of the site. The owner notification for a generated digest issue is sent to the configured address (or the site administrator email) and contains the issue subject and admin links.<\/p>\n\n<p>Site owners are responsible for obtaining any consent required for follow-up email and newsletters, setting an appropriate retention period, and describing this processing in their privacy policy. Deleting a contact also removes its pending confirmation, newsletter send records, and delivery logs. Deleting the plugin removes its settings and custom database tables.<\/p>\n\n<h4>Languages<\/h4>\n\n<p>Text that subscribers see (signup form, confirmation emails, unsubscribe pages, and email footers) uses English source strings and ships with a Japanese translation in the plugin's <code>languages<\/code> folder, so English sites show English and Japanese sites keep their existing wording. Signup form labels left at their defaults follow the site language; labels you customise are shown exactly as typed. Administration screens are currently in Japanese.<\/p>\n\n<h3>Updating and recovery<\/h3>\n\n<ol>\n<li>Before updating, save a matched backup of the database and site files, including the installed plugin ZIP, settings and scheduled jobs. Verify that the backup can be restored in an isolated environment with outgoing mail and external requests blocked. Arrange a maintenance window away from scheduled sends, and inspect pending\/running jobs. A backup alone is not proof of recoverability.<\/li>\n<li>Use the WordPress plugin update, or Plugins &gt; Add New &gt; Upload Plugin and replace the installed plugin with the reviewed ZIP. Do not delete\/uninstall the plugin: uninstall is not an update or a rollback. Check the version, contacts (including unsubscribed contacts), settings, sequences, logs, newsletters and schedules after updating. For older 0.4.x installations this update adds signup\/newsletter\/digest storage; retained counts need not equal monthly totals or distinct recipients.<\/li>\n<li>If the dashboard or Digests screen says automatic generation is held for review, review existing drafts, send history and future reservations. The hold concerns digest generation; it does NOT stop existing newsletter sends. The active\/paused definition switch is not a substitute for clearing the migration hold. The reviewed-resume form appears only when its safety checks pass. Enter the review reason, explicitly confirm the displayed future reservations, then use the reviewed-resume button. It does not delete\/recreate reservations or resend past campaigns.<\/li>\n<li>Do not force resume when reservations are expired, within five minutes of generation, duplicated, running, inconsistent, or being rebuilt. If the form is absent or the warning persists, keep generation held and ask the administrator\/support to review the stored state. Do not delete locks, migration markers or scheduler records, repeatedly save, manually run cron, or resend to clear the warning. This release does not automatically replay missed campaigns.<\/li>\n<li>If an update fails, retain the error and job history. Prevent further sending through an operator-managed maintenance procedure before recovery. Restore the matched pre-update files AND database only after reconciling any sends, signups and unsubscribe changes that occurred since the backup. An old database can reintroduce sent jobs or reverse unsubscribe changes; never resume sending blindly after restoration. Rehearse the recovery in isolation first. Replacing only plugin files with an old version is not a supported database rollback.<\/li>\n<\/ol>\n\n<p>If <code>\/newsletter\/{slug}\/<\/code> returns 404 after updating, save WordPress permalink settings once. Newsletter <code>utm_campaign<\/code> and <code>utm_content<\/code> values change for newsletters created after this update; sequence email UTM values are unaffected. Enter a sender postal address in Settings before sending newsletters.<\/p>\n\n<h4>\u66f4\u65b0\u3068\u5fa9\u65e7\u306e\u6ce8\u610f<\/h4>\n\n<p>\u66f4\u65b0\u524d\u306b\u3001DB\u3068\u30b5\u30a4\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u540c\u6642\u70b9\u3067\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3057\u3001\u65e7\u7248ZIP\u30fb\u8a2d\u5b9a\u30fb\u4e88\u7d04\u72b6\u614b\u3082\u4fdd\u5b58\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30e1\u30fc\u30eb\u9001\u4fe1\u3068\u5916\u90e8\u901a\u4fe1\u3092\u906e\u65ad\u3057\u305f\u9694\u96e2\u74b0\u5883\u3067\u5fa9\u65e7\u3092\u78ba\u8a8d\u3057\u3001\u914d\u4fe1\u4e88\u5b9a\u3068\u91cd\u306a\u3089\u306a\u3044\u6642\u9593\u5e2f\u306bWordPress\u6a19\u6e96\u66f4\u65b0\u307e\u305f\u306fZIP\u4e0a\u66f8\u304d\u3092\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002\u524a\u9664\u30fb\u30a2\u30f3\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306f\u66f4\u65b0\u3084\u5fa9\u65e7\u306e\u624b\u9806\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n<p>\u66f4\u65b0\u5f8c\u306f\u9023\u7d61\u5148\uff08\u914d\u4fe1\u505c\u6b62\u3092\u542b\u3080\uff09\u30fb\u8a2d\u5b9a\u30fb\u30b9\u30c6\u30c3\u30d7\u30e1\u30fc\u30eb\u30fb\u914d\u4fe1\u5c65\u6b74\u30fb\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc\u30fb\u4e88\u7d04\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u300c\u81ea\u52d5\u751f\u6210\uff1a\u4fdd\u7559\uff08\u8981\u78ba\u8a8d\uff09\u300d\u306f\u30c0\u30a4\u30b8\u30a7\u30b9\u30c8\u751f\u6210\u306e\u4fdd\u7559\u3067\u3042\u308a\u3001\u65e2\u5b58\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc\u306e\u9001\u4fe1\u505c\u6b62\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u300c\u5b9a\u7fa9\uff1a\u6709\u52b9\u300d\u3068\u4fdd\u7559\u89e3\u9664\u306f\u5225\u3067\u3059\u3002\u5b89\u5168\u78ba\u8a8d\u3092\u901a\u904e\u3057\u305f\u5834\u5408\u3060\u3051\u3001\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\uff0f\u30c0\u30a4\u30b8\u30a7\u30b9\u30c8\u753b\u9762\u306e\u78ba\u8a8d\u5185\u5bb9\u3092\u5165\u529b\u3057\u3001\u5c06\u6765\u4e88\u7d04\u3068\u914d\u4fe1\u5c65\u6b74\u3092\u78ba\u8a8d\u3057\u3066\u300c\u78ba\u8a8d\u3057\u305f\u4e88\u7d04\u3067\u81ea\u52d5\u751f\u6210\u3092\u518d\u958b\u300d\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u904e\u53bb\u5206\u306e\u518d\u9001\u3084\u4e88\u7d04\u306e\u4f5c\u308a\u76f4\u3057\u306f\u3057\u307e\u305b\u3093\u3002<\/p>\n\n<p>\u671f\u9650\u7d4c\u904e\u30fb5\u5206\u4ee5\u5185\u30fb\u91cd\u8907\u30fb\u5b9f\u884c\u4e2d\u30fb\u4e0d\u6574\u5408\u30fb\u4e88\u7d04\u7d44\u307f\u76f4\u3057\u4e2d\u306a\u3069\u3067\u518d\u958b\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001\u4fdd\u7559\u306e\u307e\u307e\u7ba1\u7406\u8005\u3078\u78ba\u8a8d\u3092\u4f9d\u983c\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30ed\u30c3\u30af\u3084\u7ba1\u7406\u8a18\u9332\u306e\u524a\u9664\u3001\u4fdd\u5b58\u306e\u9023\u6253\u3001cron\u306e\u624b\u52d5\u5b9f\u884c\u3001\u518d\u9001\u306b\u3088\u308b\u89e3\u6d88\u306f\u884c\u308f\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002<\/p>\n\n<p>\u969c\u5bb3\u6642\u306f\u8a18\u9332\u3092\u4fdd\u5168\u3057\u3001\u7ba1\u7406\u8005\u306e\u624b\u9806\u3067\u9001\u4fe1\u3092\u6b62\u3081\u3066\u304b\u3089\u5fa9\u65e7\u3057\u307e\u3059\u3002\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u5f8c\u306e\u9001\u4fe1\u30fb\u7533\u8fbc\u30fb\u914d\u4fe1\u505c\u6b62\u3092\u7167\u5408\u3057\u3001\u540c\u6642\u70b9\u306e\u30d5\u30a1\u30a4\u30eb\u3068DB\u3092\u5fa9\u5143\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u53e4\u3044DB\u3078\u623b\u3059\u3068\u9001\u4fe1\u6e08\u307f\u4e88\u7d04\u306e\u5fa9\u6d3b\u3084\u914d\u4fe1\u505c\u6b62\u306e\u5dfb\u304d\u623b\u308a\u304c\u8d77\u304d\u5f97\u307e\u3059\u3002\u65e7\u7248\u30d5\u30a1\u30a4\u30eb\u3060\u3051\u3092\u623b\u3059\u3053\u3068\u3084\u3001\u7167\u5408\u305b\u305a\u9001\u4fe1\u3092\u518d\u958b\u3059\u308b\u3053\u3068\u306f\u907f\u3051\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>neutrope-flow<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin ZIP through the WordPress Plugins screen.<\/li>\n<li>Activate Neutrope Flow.<\/li>\n<li>Open <strong>Neutrope Flow &gt; Settings<\/strong> and review the sender address and logging options.<\/li>\n<li>Create tags and an email sequence, then configure a Contact Form 7 or WooCommerce mapping.<\/li>\n<li>Send a test message using a non-production recipient before enabling a mapping for live submissions.<\/li>\n<\/ol>\n\n<p>Contact Form 7 is required only for Contact Form 7 mappings. WooCommerce is required only for WooCommerce mappings. Action Scheduler is optional; Neutrope Flow falls back to WP-Cron when it is unavailable.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20neutrope%20flow%20provide%20an%20email%20delivery%20service%3F\"><h3>Does Neutrope Flow provide an email delivery service?<\/h3><\/dt>\n<dd><p>No. It sends through WordPress <code>wp_mail()<\/code>. Configure WordPress mail or a compatible SMTP plugin separately and test delivery before using a sequence.<\/p><\/dd>\n<dt id=\"does%20csv%20import%20send%20email%20or%20enroll%20contacts%20in%20a%20sequence%3F\"><h3>Does CSV import send email or enroll contacts in a sequence?<\/h3><\/dt>\n<dd><p>No. CSV import only creates or updates contacts and tags. The preview and result screens explicitly confirm that no email or sequence enrollment is performed.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20connect%20to%20brevo%2C%20google%20analytics%2C%20or%20another%20api%3F\"><h3>Does the plugin connect to Brevo, Google Analytics, or another API?<\/h3><\/dt>\n<dd><p>No. Neutrope Flow makes no outbound API requests and stores no API keys. Optional UTM parameters may later be processed by an analytics system already used by the site, but the plugin does not connect to that system.<\/p><\/dd>\n<dt id=\"how%20are%20follow-up%20emails%20scheduled%3F\"><h3>How are follow-up emails scheduled?<\/h3><\/dt>\n<dd><p>Action Scheduler is used when available. Otherwise, Neutrope Flow uses WP-Cron. WP-Cron runs when WordPress receives traffic, so delivery may occur later than the configured time on low-traffic sites.<\/p><\/dd>\n<dt id=\"how%20does%20unsubscribe%20work%3F\"><h3>How does unsubscribe work?<\/h3><\/dt>\n<dd><p>Each contact receives a random unsubscribe token. Sequence emails include a visible unsubscribe link and List-Unsubscribe headers. Unsubscribed contacts are excluded from later sequence deliveries.<\/p><\/dd>\n<dt id=\"what%20personal%20data%20is%20stored%3F\"><h3>What personal data is stored?<\/h3><\/dt>\n<dd><p>The plugin can store a contact's email address, name, source metadata, tags, confirmation date, delivery-log details, newsletter send records, and unsubscribe token. Unconfirmed signup requests are kept only until confirmed or expired. Data stays in the site's WordPress database. The plugin does not store IP addresses or transmit contact data to Neutrope.<\/p><\/dd>\n<dt id=\"how%20does%20the%20signup%20form%27s%20double%20opt-in%20work%3F\"><h3>How does the signup form's double opt-in work?<\/h3><\/dt>\n<dd><p>Place the form with the shortcode or block. After submission the address receives an email with a random confirmation link that expires after the configured number of hours. No contact exists until that link is opened. An address that is already subscribed receives a short notice instead of a new confirmation, and an unsubscribed or bounced address only returns to the audience after completing a new confirmation.<\/p><\/dd>\n<dt id=\"who%20receives%20a%20newsletter%2C%20and%20why%20can%27t%20i%20send%20one%3F\"><h3>Who receives a newsletter, and why can't I send one?<\/h3><\/dt>\n<dd><p>A newsletter goes to contacts with the selected tags whose status is subscribed. Unsubscribed and bounced contacts are always excluded, and by default only contacts confirmed through the signup form are included. Sending, scheduling, and test sends are blocked until a sender postal address is entered in the settings, because bulk email laws such as the US CAN-SPAM Act and Japan's Act on Regulation of Transmission of Specified Electronic Mail require it. Sequence step emails are not affected.<\/p><\/dd>\n<dt id=\"how%20does%20the%20digest%20choose%20posts%3F\"><h3>How does the digest choose posts?<\/h3><\/dt>\n<dd><p>A digest reads published posts of the selected post types (optionally filtered by a taxonomy term) that were published after the previous issue was generated (or within a fixed number of days). The newest post is featured, the next N are listed, and when fewer new posts exist the plugin can fill the remaining slots with random older posts. If there are fewer new posts than the configured minimum, no issue is created and the owner is notified. Filters let a theme or site plugin change the query, the selection, each item's markup, the subject, and the rotating block.<\/p><\/dd>\n<dt id=\"is%20the%20web%20version%20indexed%20by%20search%20engines%3F\"><h3>Is the web version indexed by search engines?<\/h3><\/dt>\n<dd><p>By default a web version is published with <code>noindex, follow<\/code> (and an <code>X-Robots-Tag<\/code> header) so links are followed but the page is not indexed. You can choose <code>index, follow<\/code> per newsletter or digest, or keep the web version off. Before the send starts, only administrators can open the page.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.7.1<\/h4>\n\n<ul>\n<li>Preserve official language-pack translations and fill missing messages from bundled translations, including after language-pack updates and locale switches.<\/li>\n<li>No changes to contact data, Reports licensing, delivery settings, or scheduled reservations.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Preserve digest migration safety holds and require explicit review before resuming eligible future reservations.<\/li>\n<li>Clarify dashboard units, retained log coverage and the distinction between accepted send requests and delivery; add translations for these notices.<\/li>\n<li>Document standard updates, reviewed resume and matched database\/file recovery precautions.<\/li>\n<li>Restored the Qualification Lab explicit-consent adapter that was included in the 0.4.9 distribution. It only synchronizes the learning-support and news tags, never enrolls contacts or schedules email, and never reactivates unsubscribed or bounced contacts.<\/li>\n<li>Added recurring digests: a schedule (monthly nth weekday, monthly day, or weekly, in any timezone) assembles an issue from recent posts with a featured item, new items, optional library fill, rotating blocks, and a subject template; the issue is created ahead of time as an editable scheduled newsletter and the owner is notified by email.<\/li>\n<li>Added newsletter web versions at <code>\/newsletter\/{slug}\/<\/code> with <code>noindex, follow<\/code> by default, a canonical URL, an admin-only preview before the send, a \"View this email in your browser\" footer link, the <code>{web_version_url}<\/code> merge tag, and the <code>[neutrope_flow_newsletter_archive]<\/code> shortcode.<\/li>\n<li>Newsletter <code>utm_content<\/code> now defaults to the post slug for links to posts on the site; <code>utm_campaign<\/code> values keep hyphens (for example <code>2026-10<\/code>). Sequence-step UTM values are unchanged.<\/li>\n<li>Scheduled newsletters can be edited until the send starts.<\/li>\n<li>Fixed: links whose href is a merge tag (<code>{unsubscribe_url}<\/code>) were UTM-tagged before the tag was resolved.<\/li>\n<li>Fixed: digest subjects built from post titles showed HTML character references (for example <code>&amp;#8217;<\/code> for an apostrophe) because WordPress texturizes titles; the subject is now decoded to plain text once, with tags and line breaks removed. Email bodies, web versions, UTM values, and reporting events are unchanged.<\/li>\n<li>Fixed: with Action Scheduler, pending digest generation jobs (which carry <code>digest_id<\/code> and <code>run_at<\/code> arguments) were never cancelled when a digest was re-armed, paused, rescheduled, or deleted, so duplicates accumulated. They are now cancelled per hook and group regardless of arguments; other hooks, other groups, and completed or failed history are untouched. WP-Cron sites were not affected.<\/li>\n<li>Fixed: deactivating and reactivating the plugin re-creates the daily digest tick immediately. Previously the \"checked recently\" marker survived deactivation, so a reactivated site had no tick (and no digest re-arming) for up to 12 hours.<\/li>\n<li>Fixed: sequence-step delivery events now fire <code>neutrope_flow_delivery_recorded<\/code> before <code>neutrope_flow_email_dispatched<\/code> (the order newsletters already used), so a reporting consumer keyed by <code>source_ref<\/code> receives the campaign-template snapshot on the first send of a month too. Each event is isolated from listener errors. Payload keys are unchanged.<\/li>\n<li>New actions and filters: <code>neutrope_flow_digest_generated<\/code>, <code>neutrope_flow_digest_skipped<\/code>, <code>neutrope_flow_digest_query_args<\/code>, <code>neutrope_flow_digest_item<\/code>, <code>neutrope_flow_digest_items<\/code>, <code>neutrope_flow_digest_item_html<\/code>, <code>neutrope_flow_digest_subject<\/code>, <code>neutrope_flow_digest_slot<\/code>, <code>neutrope_flow_digest_html<\/code>, <code>neutrope_flow_digest_campaign<\/code>, <code>neutrope_flow_digest_notification<\/code>, <code>neutrope_flow_newsletter_web_html<\/code>, <code>neutrope_flow_newsletter_web_footer_html<\/code>, <code>neutrope_flow_newsletter_web_robots<\/code>, <code>neutrope_flow_newsletter_archive_html<\/code>.<\/li>\n<li>Database: new <code>nf_digests<\/code> table; <code>slug<\/code>, <code>web_visibility<\/code>, <code>issue_no<\/code>, and <code>items_json<\/code> columns on <code>nf_newsletters<\/code>. Uninstall removes them.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Added double opt-in signup forms: <code>[neutrope_flow_signup form=\"ID\"]<\/code> shortcode and the \"Neutrope Flow Signup Form\" block, with per-form tags, optional welcome sequence, consent text, editable labels, honeypot, minimum fill time, and IP-free rate limiting.<\/li>\n<li>Added confirmation emails with expiring tokens and resend limits; contacts are created only on confirmation, and unsubscribed or bounced contacts return only after a new confirmation.<\/li>\n<li>Added newsletters: subject, preview text, HTML body, tag include\/exclude audience, confirmed-only option, test send, send now, scheduled send, pause\/resume\/cancel, and batched delivery with a batch size and hourly cap.<\/li>\n<li>Added sender identity settings (Reply-To, postal address, footer line). Newsletter sending is blocked until a postal address is entered.<\/li>\n<li>Added per-newsletter UTM parameters with per-link <code>utm_content<\/code>, applied through the existing link-tagging rules.<\/li>\n<li>Added <code>neutrope_flow_signup_confirmed<\/code>, <code>neutrope_flow_newsletter_batch_sent<\/code>, and <code>neutrope_flow_newsletter_completed<\/code> actions, and emitted the existing <code>neutrope_flow_delivery_recorded<\/code> and content snapshot events for newsletters so reporting extensions need no changes.<\/li>\n<li>Added <code>nf_signup_forms<\/code>, <code>nf_pending_confirmations<\/code>, <code>nf_newsletters<\/code>, and <code>nf_newsletter_sends<\/code> tables, <code>nf_contacts.confirmed_at<\/code>, and <code>nf_email_logs.newsletter_id<\/code> (created automatically on update; existing data is unchanged).<\/li>\n<li>Added a kind filter to the delivery log and new dashboard counters.<\/li>\n<li>Subscriber-facing text (signup form, confirmation emails, unsubscribe pages, email footers, block name) now uses English source strings with a bundled Japanese translation loaded from <code>languages\/<\/code>; existing Japanese sites are unchanged.<\/li>\n<\/ul>\n\n<h4>0.4.9<\/h4>\n\n<ul>\n<li>Added a recipient-free campaign-template content snapshot event after successful email dispatch.<\/li>\n<li>Added stable monthly source references, canonical subject\/body\/format\/CTA\/UTM metadata, and a deterministic SHA-256 content hash for compatible local reporting extensions.<\/li>\n<li>Added request-local duplicate suppression and listener-exception isolation so snapshot consumers cannot interrupt email delivery.<\/li>\n<li><p>Added no database migration and no dependency on a reporting plugin.<\/p><\/li>\n<li><p>Added an opt-in-only Qualification Lab consent adapter for the learning-support and news tags.<\/p><\/li>\n<li>The adapter never schedules or sends email, and never reenables an unsubscribed or bounced contact.<\/li>\n<\/ul>\n\n<h4>0.4.8<\/h4>\n\n<ul>\n<li>Standardized admin request, nonce, upload, and transient identifiers with the full plugin-specific prefix.<\/li>\n<li>Added nonce validation to the central admin action router before dispatching any handler.<\/li>\n<li>Re-audited enqueued assets, admin permissions, unsubscribe confirmation, and prepared SQL identifiers.<\/li>\n<\/ul>\n\n<h4>0.4.7<\/h4>\n\n<ul>\n<li>Removed invalid plugin and author URL headers for WordPress.org review.<\/li>\n<li>Replaced inline unsubscribe-page CSS with WordPress enqueue APIs.<\/li>\n<li>Added nonce validation for admin edit links that read GET parameters.<\/li>\n<li>Renamed the admin notice transient key to a longer plugin-specific prefix.<\/li>\n<li>Updated database queries to use prepared identifier placeholders where supported.<\/li>\n<li>Raised the minimum WordPress version to 6.2 for prepared identifier placeholder support.<\/li>\n<\/ul>\n\n<h4>0.4.6<\/h4>\n\n<ul>\n<li>Prepared the plugin for WordPress.org review.<\/li>\n<li>Rewrote the readme in English and added screenshot captions.<\/li>\n<li>Renamed internal PHP classes to longer Neutrope_Flow_* names.<\/li>\n<li>Audited database-query warnings and clarified fixed internal table usage.<\/li>\n<li>Added uninstall cleanup for WooCommerce mapping data and fallback cron cleanup.<\/li>\n<li>Added WordPress 7.0 smoke-test verification.<\/li>\n<\/ul>\n\n<h4>0.4.5<\/h4>\n\n<ul>\n<li>Added a two-step CSV contact import with preview and explicit confirmation.<\/li>\n<li>Added UTF-8 validation, row and file-size limits, column detection, duplicate handling, and tag import.<\/li>\n<li>CSV import does not send email, enroll sequences, or schedule delivery.<\/li>\n<\/ul>\n\n<h4>0.4.4<\/h4>\n\n<ul>\n<li>Added extension hooks for reporting integrations.<\/li>\n<li>Added optional UTM parameters for eligible CTA links. The setting is disabled by default.<\/li>\n<\/ul>\n\n<h4>0.4.3<\/h4>\n\n<ul>\n<li>Improved List-Unsubscribe header compatibility across WordPress mail transports.<\/li>\n<\/ul>\n\n<h4>0.4.2<\/h4>\n\n<ul>\n<li>Added RFC 8058 one-click unsubscribe support.<\/li>\n<\/ul>\n\n<h4>0.4.1<\/h4>\n\n<ul>\n<li>Added a confirmation step for visible unsubscribe links.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Added simple HTML email and CTA button support.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added built-in sequence templates.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added WooCommerce order mappings.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Contacts, tags, follow-up sequences, double opt-in signup forms, newsletters, and digests from Contact Form 7, WooCommerce, and your own forms.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/341901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=341901"}],"author":[{"embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/neutropeinc"}],"wp:attachment":[{"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=341901"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=341901"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=341901"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=341901"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=341901"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ml.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=341901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}