Store admin
Emails and background jobs
Edit the six customer emails the Companion plugin adds to WooCommerce, make sure they are delivered, and keep its scheduled jobs running on time.
The storefront never sends email itself. Account emails (verification, password reset, security alerts) and back-in-stock alerts are sent by WordPress through six standard WooCommerce emails that the Companion plugin adds. Some work, such as sending restock alerts or tidying old data, runs in the background on a schedule. This page covers both.
Before you start
Section titled “Before you start”- Set the Storefront URL under StoreFront → Settings → General. Every link in these emails points to the storefront. Without it, they fall back to WordPress’s API, which answers with raw JSON instead of a page. See Connect the storefront.
- Make sure your site can actually deliver email (see below). New customers must verify their email address before they can sign in, so a site that cannot send mail locks new customers out.
The six customer emails
Section titled “The six customer emails”All six appear in WooCommerce’s email list alongside its own emails, and use your WooCommerce email header, footer and colours. Each is sent to the shopper; there is no recipient to set.
| When it is sent | Default subject | Default heading | |
|---|---|---|---|
| Email verification | A customer registers on the storefront, or asks for the verification email again. The link lasts 24 hours. | Verify your email address for {site_title} |
Confirm your email address |
| Security alert | A stolen sign-in session is suspected (a session token was reused), so the customer is signed out of every device. | Security alert for your {site_title} account |
Suspicious activity detected |
| Password reset | A customer uses “Forgot password” on the storefront. The link lasts 1 hour. | Reset your {site_title} password |
Password reset request |
| Back-in-stock sign-up: verify email | A guest asks to be told when a product is back. The link lasts 24 hours. Signed-in customers don’t get this email. | Confirm your back-in-stock alert for {product_name} |
Confirm your email address |
| Back-in-stock sign-up: confirmed | The guest clicks the confirmation link. Mentions the customer account created for them, if one was. | You are on the list for {product_name} |
We will let you know |
| Back in stock | The product is restocked. Shows the product image, the chosen options and the current price, with a Shop now button. | {product_name} is back in stock! |
Good news — it is back |
Edit an email
Section titled “Edit an email”- Go to WooCommerce → Settings → Emails.
- Click Manage (or the email’s name) next to the email.
- Change the fields you need, then click Save changes.
| Setting | What it does | Default |
|---|---|---|
| Enable/Disable | Sends or stops this email. | Enabled |
| Subject | The subject line. Leave blank to use the default shown above. | Blank |
| Email heading | The heading inside the email. Leave blank to use the default. | Blank |
| Additional content | Extra text below the main content. See the caution below. | Blank |
| Email type | Plain text, HTML or multipart. | HTML |
| Cc(s) / Bcc(s) | Extra recipients. Only shown when WooCommerce’s improved email feature is on. | Blank |
In the subject and heading you can use WooCommerce’s usual placeholders: {site_title}, {site_address},
{site_url} and {store_email}. The three back-in-stock emails also accept {product_name}.
Change the body text
Section titled “Change the body text”The main wording of each email is in a template file. A developer can override it the usual WooCommerce way, by
copying the plugin’s template into the WordPress theme as woocommerce/emails/rsc-*.php (for example
rsc-back-in-stock.php). The theme’s copy is used instead of the plugin’s.
Make sure email is delivered
Section titled “Make sure email is delivered”WordPress sends mail with the server’s basic mail function by default, and many hosts either block it or land it in spam. For a live store:
- Install an SMTP or transactional-email plugin and connect it to a mail service. If you already use the Brevo plugin for the newsletter, it can also send your site’s email.
- Use a sender address on your own domain, and add the SPF and DKIM records your mail service asks for.
- Send a test email from the SMTP plugin.
- Register a test account on the storefront and confirm the verification email arrives and its button opens the storefront.
Background jobs
Section titled “Background jobs”The Companion plugin schedules a few jobs of its own. None needs any setup, and you will rarely need to look at them.
| Job | How often | What it does |
|---|---|---|
rsc_backfill_brand_primary_category |
Daily | Works out each brand’s main category (from up to 50 of its products) for the brands page’s category badges and filter. |
rsc_rebuild_trending_categories |
Daily, plus once shortly after first install | Ranks categories by items sold in the last 30 days, for the home page’s trending categories. |
rsc_stock_notifications_cleanup |
Daily | Deletes guest stock-alert sign-ups that were never confirmed, after the number of days set on the Stock alerts tab. |
rsc_contact_entries_cleanup |
Daily | Permanently deletes contact entries that have been in the Trash for more than 30 days. |
rsc_review_media_cleanup |
Daily | Deletes review photos and videos uploaded more than a day ago but never submitted (up to 100 per run). |
rsc_send_stock_notifications |
Once per restocked product | Sends back-in-stock emails, in batches of 50, after the send delay. |
rsc_seo_sync_batch |
When you click Sync SEO | Fills SEO blanks between the plugin and Yoast SEO or Rank Math, 500 items per batch. |
The daily jobs run through WordPress’s scheduler (WP-Cron). The one-off batch jobs run through Action Scheduler,
which comes with WooCommerce, so you can watch them under WooCommerce → Status → Scheduled Actions (groups
rsc-stock-notifications and rsc-seo-sync).
Deactivating the plugin unschedules its daily jobs; they are scheduled again when it is next active.
Set up a real cron job
Section titled “Set up a real cron job”WordPress’s built-in scheduler only runs when someone loads a WordPress page. With a headless store, shoppers visit the storefront, not WordPress, so WordPress may see few visits and jobs can run late. That matters most for back-in-stock emails, which shoppers expect promptly.
The fix is a real cron job: your server calls WordPress’s scheduler on a timer. Most hosts let you add one in their control panel. A developer or your host can:
-
Add this line to
wp-config.php, so WordPress stops relying on visits:define( 'DISABLE_WP_CRON', true ); -
Add a server cron job that runs WordPress’s scheduler every few minutes, for example with WP-CLI:
Terminal window */5 * * * * cd /path/to/wordpress && wp cron event run --due-now > /dev/null 2>&1or, without WP-CLI, by requesting
wp-cron.php:Terminal window */5 * * * * curl -s https://your-wordpress-site.example/wp-cron.php?doing_wp_cron > /dev/null 2>&1 -
After a day, check WooCommerce → Status → Scheduled Actions for past-due actions. There should be none waiting.
To fill in the brands page’s category badges straight away on a new store, rather than waiting for the daily job, a developer can run it once:
wp cron event run rsc_backfill_brand_primary_categoryTroubleshooting
Section titled “Troubleshooting”| Symptom | Likely cause | Fix |
|---|---|---|
| Email buttons open a page of raw JSON | The Storefront URL is not set. | Set it under StoreFront → Settings → General. |
| Customers never receive verification emails | The site cannot deliver mail, or the email is disabled. | Set up SMTP and check WooCommerce → Settings → Emails. |
| Restock emails arrive hours late | WP-Cron only runs on WordPress visits. | Set up a real cron job. |
| Many past-due actions in Scheduled Actions | The scheduler is not running often enough. | Set up a real cron job. |
| Customers got two restock emails | WooCommerce’s experimental back-in-stock feature is also on. | Remove WOOCOMMERCE_BIS_ALPHA_ENABLED from wp-config.php. |
| Brand cards show no category | The daily brand job has not run yet. | Wait a day, or run the job once with WP-CLI. |