Skip to content
Gaurav TiwariDocs

Keep Staging and Local Copies From Emailing Customers

Updated October 30, 2026

A staging site is a full copy of the live store: the same customers, the same invoice schedules, the same gateway keys. Without a guard, a copy can email a real customer an invoice reminder, or charge a saved card for a renewal the live store already charged.

GT Extensions remembers which site is the live store. On any other copy (staging, a local site or a migrated domain) it pauses customer emails and payment provider actions until you confirm the site is the live one. Nothing on the copy is changed: settings, keys and records stay as they were.

How It Knows

When GT Extensions is activated, or first runs on a production site, it records that site as the live store. A site is treated as a copy when:

  • its address doesn’t match the live store, for example after a migration,
  • its WordPress environment type differs from the one recorded (production, staging, local), or
  • no live store has been recorded yet and it is not a production site.

What a Copy Shows

Store managers see this notice on a copy:

GT Extensions admin notice on a staging copy: customer emails and payment provider actions paused, with This is the live store and Keep paused and hide this notice buttons
  • This is the live store confirms the site, for example after you move the store to a new domain. Emails and payment actions resume, and anything held runs straight away.
  • Keep paused and hide this notice leaves the copy paused and hides the notice for that address. It still shows on GT Extensions screens.

Paused and Refused on a Copy

Held until confirmedRefused
Invoice reminders and overdue noticesRefunds at the payment provider
Proposal remindersCanceling a subscription at the payment provider
Back-in-stock alert emails and their sign-up confirmationsSaved-card and saved PayPal renewal charges
Recurring invoices (created once confirmed)Capturing or releasing a PayPal authorization, accepting a Stripe dispute
  • Sending an invoice or a proposal by hand saves it and explains that customer emails are not sent from a copy.
  • FluentCRM automations from GT Extensions wait, and start once the site is confirmed.
  • GT Stripe, GT PayPal and GT Paddle don’t take over the live store’s webhook from a copy. Use test or sandbox mode there.
  • Checkout still works, so you can test orders with test keys.
  • Held jobs are checked again before they run. A reminder for an invoice paid in the meantime sends nothing.

Decide It in wp-config.php

Hosts and agencies can settle it per environment instead of clicking the button:

// On the live server:
define('GTFC_LIVE_STORE', true);

// On staging and local copies:
define('GTFC_LIVE_STORE', false);

The constant wins over everything, and hides the confirm button. Without it, developers can decide with the gtfc/live_store filter, which receives the current answer and the reason, such as moved or environment. When a held job is skipped, the gtfc/live_store/held action runs, and gtfc/live_store/released runs after a confirmed site releases them.

Share

Was this helpful?

Still stuck? Open a support ticket