{"id":376789,"date":"2026-09-30T18:29:48","date_gmt":"2026-09-30T18:29:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/sanestly-payment-reminders-for-woocommerce\/"},"modified":"2026-09-30T18:29:12","modified_gmt":"2026-09-30T18:29:12","slug":"sanestly-payment-reminders","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sanestly-payment-reminders\/","author":23575181,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.2","requires":"6.7","requires_php":"8.1","requires_plugins":null,"header_name":"Sanestly Payment Reminders for WooCommerce","header_author":"Sanestly","header_description":"Send scheduled reminder emails for unpaid WooCommerce orders, with safeguards for historical orders.","assets_banners_color":"032735","last_updated":"2026-09-30 18:29:12","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":69,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"sanestly","date":"2026-09-30 18:29:12","revision":3721845}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3721845,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3721845,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3721845,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3721845,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3721845,"resolution":"1","location":"assets","locale":"","width":1440,"height":980},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3721845,"resolution":"2","location":"assets","locale":"","width":1440,"height":980},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3721845,"resolution":"3","location":"assets","locale":"","width":1440,"height":980},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3721845,"resolution":"4","location":"assets","locale":"","width":1440,"height":980},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3721845,"resolution":"5","location":"assets","locale":"","width":1440,"height":980},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3721845,"resolution":"6","location":"assets","locale":"","width":1440,"height":980},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3721845,"resolution":"7","location":"assets","locale":"","width":1440,"height":980}},"screenshots":{"1":"Dashboard overview with automation status and recovery stats","2":"Reminder steps configuration","3":"Email configuration and Test Email","4":"Gateway and eligibility settings","5":"Historical protection, dry run, and backfill tools","6":"Event log and recovery statistics","7":"Multilingual reminder language controls"}},"plugin_section":[],"plugin_tags":[189136,209136,66396,280224,286],"plugin_category":[45],"plugin_contributors":[283754],"plugin_business_model":[],"class_list":["post-376789","plugin","type-plugin","status-publish","hentry","plugin_tags-email-reminders","plugin_tags-order-automation","plugin_tags-payment-reminder","plugin_tags-unpaid-orders","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-sanestly","plugin_committers-sanestly"],"banners":{"banner":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/banner-772x250.png?rev=3721845","banner_2x":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/banner-1544x500.png?rev=3721845","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/icon-128x128.png?rev=3721845","icon_2x":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/icon-256x256.png?rev=3721845","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/screenshot-1.png?rev=3721845","caption":"Dashboard overview with automation status and recovery stats"},{"src":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/screenshot-2.png?rev=3721845","caption":"Reminder steps configuration"},{"src":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/screenshot-3.png?rev=3721845","caption":"Email configuration and Test Email"},{"src":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/screenshot-4.png?rev=3721845","caption":"Gateway and eligibility settings"},{"src":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/screenshot-5.png?rev=3721845","caption":"Historical protection, dry run, and backfill tools"},{"src":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/screenshot-6.png?rev=3721845","caption":"Event log and recovery statistics"},{"src":"https:\/\/ps.w.org\/sanestly-payment-reminders\/assets\/screenshot-7.png?rev=3721845","caption":"Multilingual reminder language controls"}],"raw_content":"<!--section=description-->\n<p>Unpaid WooCommerce orders often sit until stock hold expires or a customer forgets to pay. Sanestly Payment Reminders for WooCommerce sends a short, merchant-controlled sequence of reminder emails for eligible unpaid orders.<\/p>\n\n<p>Automation stays off until you enable it. Activation does not email customers and does not schedule reminders for existing orders. Orders created before the processing cutoff stay excluded until you preview and run an explicit backfill.<\/p>\n\n<p>Reminders stop after payment. Each reminder step is sent at most once. Eligibility (order status, payment gateway, amount, age, and cutoff) is re-checked before every real send.<\/p>\n\n<p>The plugin supports High-Performance Order Storage (HPOS), uses Action Scheduler from WooCommerce, and can send reminder copy in the order language when Polylang or WPML is available.<\/p>\n\n<h3>Key Features<\/h3>\n\n<ul>\n<li>Up to four reminder steps with separate delay, subject, heading, body, CC, and BCC<\/li>\n<li>Payment gateway, status, amount, and age eligibility rules<\/li>\n<li>Historical order protection via processing cutoff<\/li>\n<li>Dry-run preview before enabling automation or backfill<\/li>\n<li>Explicit batched backfill for older unpaid orders<\/li>\n<li>Manual send, pause, resume, and cancel on the order screen<\/li>\n<li>Test Email that never changes order meta, schedules, or stats<\/li>\n<li>Optional auto-cancel of unpaid orders after a delay<\/li>\n<li>Recovery statistics and event log<\/li>\n<li>HPOS compatible (orders accessed through WooCommerce CRUD)<\/li>\n<li>Multilingual order-language handling for Polylang and WPML<\/li>\n<li>Action Scheduler integration (no custom cron table)<\/li>\n<\/ul>\n\n<h3>How It Works<\/h3>\n\n<ol>\n<li>An unpaid order is created after the processing cutoff.<\/li>\n<li>The plugin checks eligibility (status, gateway, totals, age, cutoff, pause state).<\/li>\n<li>Eligible reminder steps are scheduled with Action Scheduler.<\/li>\n<li>Each step sends once when due, after a fresh eligibility check.<\/li>\n<li>When the order is paid (or otherwise no longer eligible), future reminders are cancelled.<\/li>\n<\/ol>\n\n<h3>Configuration<\/h3>\n\n<ol>\n<li>Open WooCommerce \u2192 Payment Reminders \u2192 Reminders and review the reminder steps.<\/li>\n<li>Open Settings and confirm eligible statuses, payment methods, totals, age limits, and the processing cutoff.<\/li>\n<li>Open Tools and run a dry run if you want a preview of matching orders.<\/li>\n<li>Enable automation only after the preview looks correct.<\/li>\n<\/ol>\n\n<p>Important: activation never emails historical customers. Orders created before the processing cutoff remain excluded until you change the cutoff and run an explicit backfill with confirmation.<\/p>\n\n<h3>Multilingual Support<\/h3>\n\n<p>When a multilingual plugin is active, the plugin records and uses the order language for reminder content.<\/p>\n\n<ul>\n<li>Polylang: live-tested order-language reminder behavior.<\/li>\n<li>WPML: integration code is included and covered by automated tests. A full commercial WPML end-to-end store environment was not part of the release live suite.<\/li>\n<\/ul>\n\n<p>Fallback copy comes from the plugin settings when no translation is available.<\/p>\n\n<h3>HPOS<\/h3>\n\n<p>The plugin is compatible with WooCommerce High-Performance Order Storage. Order reads and writes use WooCommerce order APIs (<code>wc_get_order<\/code> \/ <code>WC_Order<\/code> CRUD), not direct post-meta assumptions for core order fields.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Upload the <code>sanestly-payment-reminders<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP via Plugins \u2192 Add New \u2192 Upload Plugin.<\/li>\n<li>Activate <strong>Sanestly Payment Reminders for WooCommerce<\/strong>.<\/li>\n<li>Open WooCommerce \u2192 Payment Reminders and review reminder copy, rules, and the processing cutoff before enabling automation.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20activation%20immediately%20email%20old%20orders%3F\"><h3>Will activation immediately email old orders?<\/h3><\/dt>\n<dd><p>No. Automation defaults to off. Activation does not send emails or schedule reminders. Historical orders before the processing cutoff stay excluded until you preview and explicitly backfill.<\/p><\/dd>\n<dt id=\"what%20happens%20after%20an%20order%20is%20paid%3F\"><h3>What happens after an order is paid?<\/h3><\/dt>\n<dd><p>Future reminder actions for that order are cancelled. Paid orders are not reminded again.<\/p><\/dd>\n<dt id=\"which%20payment%20gateways%20are%20supported%3F\"><h3>Which payment gateways are supported?<\/h3><\/dt>\n<dd><p>You choose eligible payment methods in Settings. Use \u201call methods\u201d or a specific allow\/deny list of gateway IDs available on your store.<\/p><\/dd>\n<dt id=\"can%20i%20send%20a%20reminder%20manually%3F\"><h3>Can I send a reminder manually?<\/h3><\/dt>\n<dd><p>Yes. The order screen includes manual send, pause, resume, and cancel actions. Manual send uses the same eligibility and duplicate-protection pipeline as scheduled sends.<\/p><\/dd>\n<dt id=\"can%20i%20test%20an%20email%20first%3F\"><h3>Can I test an email first?<\/h3><\/dt>\n<dd><p>Yes. The Email tab includes Test Email. Test sends never mutate order meta, schedules, or statistics.<\/p><\/dd>\n<dt id=\"does%20it%20support%20hpos%3F\"><h3>Does it support HPOS?<\/h3><\/dt>\n<dd><p>Yes. The plugin is written against WooCommerce order CRUD and has been exercised with HPOS on and off.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multilingual%20stores%3F\"><h3>Does it support multilingual stores?<\/h3><\/dt>\n<dd><p>Yes. Order language can drive reminder copy with Polylang or WPML. Polylang has been live-tested; WPML has automated coverage of the integration path.<\/p><\/dd>\n<dt id=\"what%20is%20backfill%3F\"><h3>What is Backfill?<\/h3><\/dt>\n<dd><p>Backfill schedules reminders for older unpaid orders that match your rules after you confirm a dry-run preview. It runs in background batches and requires an explicit confirmation checkbox.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20the%20plugin%20is%20deactivated%3F\"><h3>What happens when the plugin is deactivated?<\/h3><\/dt>\n<dd><p>Scheduled reminder actions are cleared on deactivation. Plugin settings remain so you can reactivate later. Uninstall removes plugin options and scheduled actions; order meta (<code>_pmrwc_*<\/code>) is left in place by design.<\/p><\/dd>\n<dt id=\"what%20data%20does%20the%20plugin%20store%3F\"><h3>What data does the plugin store?<\/h3><\/dt>\n<dd><p>Plugin settings, event log entries, stats cache, backfill state, temporary send locks, Action Scheduler jobs in group <code>pmrwc<\/code>, and order meta keys prefixed with <code>_pmrwc_<\/code> (reminder state, language markers, and related flags).<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20data%20to%20sanestly%3F\"><h3>Does the plugin send data to Sanestly?<\/h3><\/dt>\n<dd><p>No. The free plugin does not phone home, collect telemetry, or call Sanestly servers.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Scoped admin notices to the plugin screen (Hold Stock warning also on WooCommerce Inventory settings).<\/li>\n<li>Made operational notices dismissible per user; removed backfill recovery from global admin_notices.<\/li>\n<li>Hardened Tools delete-data with a server-side confirmation check.<\/li>\n<li>Limited WooCommerce-missing and PHP version notices to plugins.php with activate_plugins capability.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial WordPress.org release.<\/li>\n<li>Scheduled and manual unpaid-order reminder emails with multi-step sequences.<\/li>\n<li>Historical order protection, dry run, and explicit backfill.<\/li>\n<li>Payment and eligibility checks stop further reminders after payment.<\/li>\n<li>Duplicate-send protection, pause\/resume, optional auto-cancel, and recovery stats.<\/li>\n<li>Test Email without mutating order state.<\/li>\n<li>HPOS support and Polylang\/WPML order-language architecture.<\/li>\n<li>Action Scheduler integration.<\/li>\n<\/ul>","raw_excerpt":"Send scheduled reminder emails for unpaid WooCommerce orders, with safeguards so historical customers are not contacted by surprise.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/376789","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=376789"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sanestly"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=376789"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=376789"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=376789"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=376789"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=376789"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=376789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}