| 开发者 | bigrat95 |
|---|---|
| 更新时间 | 2026年10月13日 21:47 |
| 捐献地址: | 去捐款 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
is_email validationwc-ajax endpointwp_kses), for example to link your privacy policy. Left empty, the default text is translated in each visitor's languageoli_acr_capture_rate_limits filter) and a honeypot fieldDONOTCACHEPAGE; an expired nonce from a cached page is refreshed automaticallyoli_acr_lang_adapters filterswitch_to_locale). Default templates stay translatable until you edit them{first_name}, {last_name}, {full_name}, {email}, {cart_items}, {cart_total}, {recovery_link}, {recovery_button}, {coupon}, {coupon_code}, {unsubscribe_link}, {site_name}, {site_url}, {order_number}, {order_date}oli_acr_retry_delays filter); the cause is shown in the admin and logged in WooCommerce > Status > Logs, even without WP_DEBUG{coupon} or {coupon_code})List-Unsubscribe and List-Unsubscribe-Post one-click headers, RFC 8058) and an exclusion list you can editoli_acr_manage capabilitydbDelta and a schema versionUPDATE marks carts as abandoned; reminders are processed in batches (oli_acr_batch_size filter), under an atomic lock with a time budget so two runs never send the same reminderoli-abandoned-cart-recovery folder to /wp-content/plugins/, or install the zip from Plugins > Add New > Upload PluginYes: TranslatePress, Polylang, WPML and Weglot are detected automatically (in that order of priority: WPML, Polylang, TranslatePress, Weglot, then WordPress itself). The language of the checkout page is saved with the cart, the reminder is sent in that language, and its links open the store in that language. Under Abandoned Carts > Email templates, each template has one tab per active language. Polylang needs Polylang for WooCommerce or a short snippet: see "Polylang: what do I need?" below.
Free Polylang alone translates the pages, but WooCommerce does not recognize the translated cart and checkout pages: on those pages the capture script is not loaded and no cart is saved in the other languages. Install Polylang for WooCommerce, or link the translated pages to WooCommerce with this snippet (in a small plugin or your theme's functions.php):
add_filter( 'woocommerce_get_checkout_page_id', function ( $id ) { return function_exists( 'pll_get_post' ) && pll_get_post( $id ) ? pll_get_post( $id ) : $id; } );
add_filter( 'woocommerce_get_cart_page_id', function ( $id ) { return function_exists( 'pll_get_post' ) && pll_get_post( $id ) ? pll_get_post( $id ) : $id; } );
Until one of them is in place, the plugin shows a dismissible notice on its own screens.
For each field, in this order: the text written in that language's tab; the WPML String Translation or Polylang string translation of the fallback language text; the default text translated in that language (if the fallback text is still the default one); then the fallback language text. The same order applies to the consent text.
The language used when a cart's language is unknown or no longer active, and for texts missing in a language. By default it is the site's default language (or the multilingual plugin's default language); you can change it in Settings.
Extend the OLI_ACR_Lang_Adapter class (languages, current language, URL conversion, optional string translation) and add an instance with the oli_acr_lang_adapters filter.
Yes, once they consent. With the default settings, the email and the cart are saved only after the guest ticks the consent box on the checkout page; the email is then sent on blur or change, with the cart content. No account or order is needed. If you turn consent off (your responsibility), the email is saved as soon as it is typed.
Yes. The same script listens to the email field of the classic checkout and of the block checkout.
When it has had no activity for the delay set in Settings (60 minutes by default). Each template is then sent after its own delay, counted from that moment.
The recovery link refills the cart, pre-fills the email, applies the coupon of the email (if any) and redirects to the checkout. As soon as the order is placed, the cart is marked Recovered and no other reminder is sent.
Yes. Orders are only accessed through the WooCommerce CRUD API and compatibility is declared for custom order tables and the cart/checkout blocks.
No. The capture request only runs on the checkout page. Detection and sending run in the background with Action Scheduler, in batches, on indexed queries.
No, not by default. The Require consent switch is on by default and applies to guests and to logged-in customers: until the box is ticked, nothing is sent to the server or saved (no email, phone or cart), and no reminder is sent. A logged-in customer who ticked the box once is remembered (the box is shown ticked and can be unticked to withdraw consent). This follows Quebec's Law 25 and the GDPR, which require express consent before collecting personal information for marketing reminders. You can turn the switch off in Settings — guests and logged-in customers are then tracked without the box — but you become responsible for having another legal basis, and a warning stays in the admin. Carts saved while the switch is off are marked as captured without consent: if you turn the switch back on, they are not reminded (unless the customer ticks the box later). You can also choose to never track guests. Reminders for pending (unpaid) orders do not depend on this switch.
Version 1.1.0 turns consent on for these stores (the switch is on) and shows a notice on the plugin's screens until you dismiss it. You can turn consent off again in Settings, under your own responsibility.
No. Version 1.0.x did not record whether a cart was saved with the consent box ticked or in "Always" mode (a store may also have switched modes before updating). To be safe, every cart saved by 1.0.x — guests and logged-in customers — is marked as captured without consent and is not reminded until the customer ticks the box again in 1.1.0. Pending order reminders are not affected.
The cart gets the Send failed status with the error message, a dismissible notice is shown on the plugin's screens and the error is logged in WooCommerce > Status > Logs (source oli-abandoned-cart-recovery), even without WP_DEBUG. The reminder is retried after 5 minutes, 30 minutes and 2 hours, then the cart stays Send failed; use Send next reminder now once your mail settings are fixed.
In the language saved with the cart (site language, or WPML / Polylang language). Default templates and the default consent text are translated in that language as long as you did not edit them. An edited template is sent as written, in a single language.
Deleting the plugin from the Plugins screen removes its tables (carts and email log), options, capability, scheduled actions with their Action Scheduler logs and group, WP-Cron events, the plugin's WooCommerce log files, order, user and coupon metadata (including the block checkout consent field), the plugin's keys in WooCommerce sessions, and generated coupons that were never used. Generated coupons that were used stay in WooCommerce, because they are linked to orders; only the plugin's marker is removed. To keep everything, tick Keep the data when the plugin is deleted in Settings (off by default).
The plugin is written in English and fully translatable (text domain oli-abandoned-cart-recovery). Translations are managed on translate.wordpress.org and installed automatically by WordPress; French (Canada) and French (France) translations will be contributed there.
oli_acr_item_namewp_set_option_autoload_values() is not available), and PHP / WordPress versions are checked with a clear message instead of an errorwp_kses()wp_kses)WP_DEBUGmeta_query notice; already processed pending orders no longer block newer onesDONOTCACHEPAGE), and an expired capture nonce is refreshed automaticallyoli_acr_lang_adapters filter to add others{coupon} or {coupon_code}), with a warning in the template list and editor{coupon_amount} placeholder and a translatable coupon introduction sentence in the default templates (removed when there is no coupon)oli_acr_translate_url filter_wc_other/oli-acr/consent) stored in the customer data of WooCommerce sessions