Zum Inhalt springen

Configuration

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

Followup is configured on one screen at WooCommerce → Follow-ups, available to anyone with the manage_woocommerce capability (shop managers included). Everything is stored in a single option, followup_settings: a global sender plus a block per email type. Saved values are merged over the packaged defaults, so a partially-saved type still has every field.

Applies to every message Followup sends.

  • From name, the sender name shown in the inbox. Stored as from_name. Blank falls back to your site name (get_bloginfo('name')); the field placeholder shows the current fallback.
  • From email, the From / reply-to address. Stored as from_email, validated with is_email on save (an invalid value is discarded, not stored). Blank falls back to the site admin email. Use an address on your own domain so messages pass SPF/DKIM.

Followup sends through wp_mail, so any SMTP or transactional-email plugin you run handles delivery automatically.

Followup ships two types, both enabled by default:

TypeDefault triggerDefault delayPurpose
Thank-youCompleted1 dayA short note after the order is fulfilled
Review requestCompleted7 daysAsks for a review once the product is in use

Each type stores its settings under followup_settings['emails'][<type>] where the type key is thank_you or review.

The per-type switch. When off, the type is never scheduled or sent. You can run only one type or both.

The WooCommerce order status that schedules the email. The dropdown lists every status registered on your store (via wc_get_order_statuses, with the wc- prefix stripped), so it adapts to custom statuses. Defaults to completed. If a saved status no longer exists, Followup falls back to the type’s default status.

Whole days to wait after the order reaches the trigger status. 0 sends on the next daily run. The field accepts 0 to 3650; values are clamped to that range on save.

How the delay is measured is worth knowing precisely: Followup compares each order’s last-modified date against now − delay days. It does not record the exact moment an order entered the trigger status. In practice the last-modified date moves when the status changes, so the delay is honoured, and the rule is conservative, so an email never sends earlier than the delay. An order edited after it reaches the trigger status resets this clock, which can push the follow-up later.

Plain-text templates. Subject is sanitised with sanitize_text_field, body with sanitize_textarea_field. Leave either blank to fall back to the packaged default text for that type. Both support the tokens below; a token in the subject (e.g. the customer’s name) is fine.

Replaced per order immediately before sending:

{customer} the order's billing first name; "there" if it is empty
{order} the order number, prefixed with # (e.g. #1234)
{site} your site name

There are no other tokens. An unknown token is left in the text verbatim.

A daily wp-cron event, followup_daily_event, drives everything:

  • For each enabled type it queries up to 200 orders per run that are in the trigger status, old enough by the delay, and not yet sent this follow-up.
  • It marks the send against the order (_followup_sent_<type> meta, set to a timestamp) before calling wp_mail, then sends. If wp_mail fails, it removes the mark so the order retries on the next run. This claim-then-send order is why a crash mid-run can never produce a duplicate.
  • An order with no valid billing email, or a type whose subject or body renders empty, is skipped.

The event is scheduled an hour after activation and re-scheduled on admin_init if it goes missing, so an update without re-activation does not stop the emails.

  • Plain-text only. Bodies send as plain text. (Pro turns them into branded HTML through the followup/mail filter, see Building a sequence.)
  • One send per order per type, enforced by the per-order meta flag.
  • No shortcodes and no front-end output. Followup is entirely back-office plus email; it renders nothing on the storefront.

Settings live in the followup_settings option; a schema marker in followup_db_version. Deleting the plugin deletes both options. The per-order _followup_sent_<type> meta is not removed on uninstall (it is harmless order metadata). Everything stays in your own database, Followup contacts no external service.