The WordPress plugin
Nectazo Connect: product sync, transactional email and embedded forms.
Nectazo Connect is a WordPress plugin that links a WordPress site to one Nectazo brand. It does three jobs: pushes products, routes transactional email, and embeds signup forms.
Installing
- 1In Nectazo, go to
Settings → Integrations → API keysand create a key for the brand this site belongs to. Copy it — it is shown only once. - 2Install and activate the plugin on your WordPress site.
- 3Paste the API key into the plugin settings and save.
Each WordPress site connects to one brand, using that brand's own key. If you run several sites, give each its own key — that way revoking one does not disturb the others.
What you can turn on
| Feature | Effect |
|---|---|
| Product sync | Pushes your WooCommerce catalogue to Nectazo, and pushes updates whenever you add or edit a product. |
| Subscription sync | Writes each customer's WooCommerce Subscriptions state onto their contact, so you can segment on what they are subscribed to. Needs the WooCommerce Subscriptions extension. |
| Transactional email | Takes over WordPress's built-in mail so password resets, order emails and everything else send through Nectazo. |
| Form shortcode | Adds [nectazo_form id="..."] so you can drop a Nectazo signup form into any page or post. |
| Site-wide forms | Loads chosen forms on every page — what a popup needs when the button that opens it could be anywhere. |
Each is independent — enable only what you want.
Putting a form on the site
There are two routes, and which one you want depends on whether the form decides for itself when to appear.
- An inline form renders where you put it, so it goes in with the [nectazo_form] shortcode — a page, a post, a widget, anywhere a shortcode works.
- A popup, slide-in or bar decides its own moment, so it needs to be loaded on every page it might appear on. Tick it under the plugin's Site-wide forms setting rather than hunting for somewhere to park a shortcode.
The setting lists your published forms as checkboxes, read from Nectazo, so there is no id to copy anywhere. More than one can be ticked — two forms opened by their own buttons is an ordinary thing to want. Two that open by themselves is not, and the plugin says so rather than refusing, because only you know what you meant by it.
It matters most for a form set to open when a button is clicked, since that button can be in a header, a menu or a footer that appears on every page. Add data-nectazo-open to any button or link and it opens the form. Setting both the shortcode and the site-wide option for the same form is harmless — it loads once either way.
Subscription sync
If you run WooCommerce Subscriptions, the plugin can write four fields onto each customer's contact. They are ordinary custom fields, so everything in Segments works on them.
There is nothing to set up first. Nectazo has no list of custom fields to register against — a field exists as soon as something writes it, and appears in the segment builder once at least one contact has it.
| Field | Holds |
|---|---|
wc_subscription | active, pending-cancel, on-hold, pending, cancelled, expired, or none |
wc_subscription_plan | The product name they are subscribed to right now. Comma-separated if more than one. |
wc_subscription_period | month or year — how often they are billed. |
wc_subscription_coupon | Coupon codes applied to those subscriptions. Empty means full price. |
When a subscription is cancelled or expires, the plan, period and coupon are cleared — only the status remembers what happened. That is deliberate: a cancelled annual subscriber who kept period = year would be excluded from “everyone not on an annual plan”, and they are exactly who a win-back offer is for. on-hold counts as not current too, because a failed payment is not an active plan. pending-cancel does count, because their paid period is still running and they still have what you would be selling them.
Two worked examples. To promote a discounted annual plan without wasting it on people already paying full price for one:
- Match ANY —
wc_subscription_periodis notyear, orwc_subscription_couponis set. - That reaches monthly subscribers, lapsed subscribers, everyone who never subscribed, and annual subscribers who already have a discount — and spares full-price annual holders.
To reach only people with no live subscription at all:
- Match ALL —
wc_subscriptionis notactive. - Contacts the plugin has never touched match this too, which is usually what you want: never having subscribed is a kind of not being subscribed.
A subscriber who is not already a contact in this brand is counted and reported, not created. That is deliberate: a sync that quietly added several hundred customers to a mailing list would be a consent decision made by a background job. There is a separate Add missing subscribers as contacts button for when you do want them, and it never overrides an opt-out — anyone who has previously unsubscribed stays unsubscribed.
Turning the setting on only affects subscriptions that change from then on. Press Sync all subscriptions now in the plugin settings to fill in everyone who already has one, or your segments will be built on a fraction of the truth. Large stores are done in batches — the result tells you if there is more to do.
Subscription sync updates existing contacts only. It never creates one, so a backfill cannot flood your list with customers who were never subscribed to your emails. Adding customers as contacts is what the WooCommerce customer toggle is for.
Why the plugin pushes rather than Nectazo pulling
Most self-hosted WordPress sites sit behind bot protection — SiteGround's Anti-Bot AI, Cloudflare, Wordfence — that answers an incoming API request with a challenge page before WordPress ever runs. No credential fixes that, because nothing is wrong with the credential.
Pushing reverses the direction: the request starts from your own server, where none of those defences apply. It also means you configure nothing beyond the API key.
Something unclear or wrong? Tell us and we'll fix it.