Skip to main content
Solved

Workaround needed: Triggering a 14-day Prepayment Reminder Flow for WooCommerce "On-Hold" orders (Direct solution preferred)

  • June 23, 2026
  • 1 reply
  • 85 views

Hi everyone,

I am trying to set up a 14-day payment reminder Flow for customers who choose "Prepayment" (Vorkasse) in our store. If they haven't paid after 14 days, we want to send them a friendly reminder with our bank details.

Our Setup:

  • WooCommerce on WordPress

  • We use the default WooCommerce bank transfer/prepayment method (no 3rd party payment gateway plugin).

The Problem: To make this flow work, we need to filter or trigger the flow based on the WooCommerce order statuses "On-Hold" or "Pending Payment". Ideally, a customer triggers the flow when placing an order, we wait 14 days, and then a Conditional Split checks if the order status is still "On-Hold".

I reached out to Klaviyo Support, and this was their response:

"Although they can now be recognised as valid orders, the order status is nested so far into the data that it's not usable within a trigger filter. Sadly that means there would not be a way to automate emails relative to when a customer has a pending payment. I do apologise."

Since the native integration nests this data too deeply to be used as a functional flow filter or trigger, I am stuck.

What I am looking for (Preference: Direct & Code-based): I would highly prefer a direct solution between WooCommerce and Klaviyo (e.g., using a custom PHP snippet or a native WooCommerce webhook) rather than relying on 3rd party subscription tools like Zapier or extra plugins. I want to keep our site light and avoid middle-man platforms.

Has anyone successfully built a workaround for this? For example:

  1. Custom PHP Snippet / Webhook: A way to push a custom event (like "Order On-Hold") directly to the Klaviyo Track & Identify API whenever WooCommerce switches an order status to 'on-hold'.

  2. Alternative Klaviyo Setup: Is there a clever way to target these specific customers using custom Segments that bypasses the flow filter limitation?

If anyone has a working code snippet or has solved this exact prepayment issue directly within WordPress/WooCommerce, I would be incredibly grateful if you could share your approach!

Thanks in advance!

Best answer by GabbyEsposito

@UCSDom  Thanks for outlining your setup and constraints so clearly. This is a known limitation with WooCommerce prepayment orders.

With Klaviyo’s native WooCommerce integration:

  • Klaviyo only records Placed Order when the WooCommerce order status is processing.
  • Orders that stay in pending payment or on‑hold do not create a Placed Order, and their WooCommerce status only appears in nested event data (not usable as a trigger/filter).

So you can’t natively say “when status = on‑hold, wait 14 days, then check again” using just the built‑in WooCommerce events.

I think the best option would be to send a custom “order on-hold” event from Woocommerce → Klaviyo

Since you prefer a direct, code‑based solution and no Zapier/plugins, the recommended pattern is:

  1. Hook into WooCommerce status changes (WordPress/PHP)

    • In a small custom plugin or your theme, use hooks like woocommerce_order_status_on-hold or woocommerce_order_status_changed to detect when an order moves into your prepayment/on‑hold state.
  2. From that hook, call Klaviyo’s Track API with a custom event

    • Send a server‑side Track request to Klaviyo with an event name like "Order On-Hold".
    • Include:
      • token: your Klaviyo public API key / Site ID
      • event: "Order On-Hold"
      • customer_properties: at least $email from the order
      • properties: order ID, value, payment method, and a simple OrderStatus: "on-hold" string, etc.

    The JSON should follow Klaviyo’s standard server‑side ecommerce/Track examples; you’re just changing the event name and properties.

    Once this is in place, you’ll see a new Order On‑Hold metric in Klaviyo.

  3. Build your 14‑day reminder flow on that metric

    In Klaviyo:

    • Trigger: Metric → select your new Order On‑Hold metric.
    • Step 1: Time delay: 14 days.
    • Step 2: Conditional Split to check if they are still unpaid at day 14 (splits evaluate conditions only when someone reaches them, so the delay must come first).

    For the split condition, you can either:

    • Also send a second custom event when the order is paid (e.g. "Order Prepayment Completed") and use:
      • “Has done Order Prepayment Completed zero times since starting this flow”; or
    • Rely on the native Placed Order event (fired when WooCommerce moves to processing) and use:
      • “Has done Placed Order zero times since starting this flow”.

    Everyone on the YES path at day 14 gets your bank‑details reminder.

This gives you:

  • A direct WooCommerce → Klaviyo connection (no middle‑man tools).
  • A clean event you can reuse in future segments/flows.

Please let me know if this works!

1 reply

GabbyEsposito
Community Manager
Forum|alt.badge.img+13
  • Community Manager
  • Answer
  • June 29, 2026

@UCSDom  Thanks for outlining your setup and constraints so clearly. This is a known limitation with WooCommerce prepayment orders.

With Klaviyo’s native WooCommerce integration:

  • Klaviyo only records Placed Order when the WooCommerce order status is processing.
  • Orders that stay in pending payment or on‑hold do not create a Placed Order, and their WooCommerce status only appears in nested event data (not usable as a trigger/filter).

So you can’t natively say “when status = on‑hold, wait 14 days, then check again” using just the built‑in WooCommerce events.

I think the best option would be to send a custom “order on-hold” event from Woocommerce → Klaviyo

Since you prefer a direct, code‑based solution and no Zapier/plugins, the recommended pattern is:

  1. Hook into WooCommerce status changes (WordPress/PHP)

    • In a small custom plugin or your theme, use hooks like woocommerce_order_status_on-hold or woocommerce_order_status_changed to detect when an order moves into your prepayment/on‑hold state.
  2. From that hook, call Klaviyo’s Track API with a custom event

    • Send a server‑side Track request to Klaviyo with an event name like "Order On-Hold".
    • Include:
      • token: your Klaviyo public API key / Site ID
      • event: "Order On-Hold"
      • customer_properties: at least $email from the order
      • properties: order ID, value, payment method, and a simple OrderStatus: "on-hold" string, etc.

    The JSON should follow Klaviyo’s standard server‑side ecommerce/Track examples; you’re just changing the event name and properties.

    Once this is in place, you’ll see a new Order On‑Hold metric in Klaviyo.

  3. Build your 14‑day reminder flow on that metric

    In Klaviyo:

    • Trigger: Metric → select your new Order On‑Hold metric.
    • Step 1: Time delay: 14 days.
    • Step 2: Conditional Split to check if they are still unpaid at day 14 (splits evaluate conditions only when someone reaches them, so the delay must come first).

    For the split condition, you can either:

    • Also send a second custom event when the order is paid (e.g. "Order Prepayment Completed") and use:
      • “Has done Order Prepayment Completed zero times since starting this flow”; or
    • Rely on the native Placed Order event (fired when WooCommerce moves to processing) and use:
      • “Has done Placed Order zero times since starting this flow”.

    Everyone on the YES path at day 14 gets your bank‑details reminder.

This gives you:

  • A direct WooCommerce → Klaviyo connection (no middle‑man tools).
  • A clean event you can reuse in future segments/flows.

Please let me know if this works!