What this add-on does
A marketplace sends a lot of email, and almost all of it goes to somebody who never joined a mailing list — they just bought or sold something. Send too much and people stop reading you; send marketing without a working opt-out and you have a compliance problem. Three connected parts:
- A notification bell. An in-app feed at
/notifications/, so an event need not become an email to be noticed. - An email preference centre. Four categories a member can switch off, plus a one-click unsubscribe that needs no login.
- An email log. Every email the site sends, searchable.
The middle one is the reason to own it. Logging email is a solved problem with free options. A marketplace-aware preference centre that the rest of your add-ons ask before they send is not.
Purely additive. Install it and the other add-ons honour the central preferences; remove it and each falls back to its own opt-out.
The notification bell
A plain, server-rendered page showing a member's 50 most recent notifications, newest first, each with an unread dot, a relative time and a link through. There is a “Mark all as read” control, and it works without JavaScript.
What raises a notification
The add-on listens for events the other add-ons already announce. Four kinds:
- New message — from Messaging & Offers, to the other party in the thread.
- Issue opened — from Disputes, to the seller.
- New review — from Reviews, to the person reviewed.
- Funds released — from Escrow, linked to the vendor's payments page.
If an add-on is not installed, its event never fires and the listener sits idle. On first run the add-on creates a published Notifications page holding the [bazaarkit_notifications] shortcode, and re-checks it on every load, so a deleted page comes back. Being per-member content, it is never page-cached.
Email preferences, and why transactional email is different
Members manage their own email from the Email preferences section on the WooCommerce My Account dashboard — buyers and sellers share one panel, because on a marketplace most people are both. Four categories, each a toggle:
| Category | What it covers | Default |
|---|---|---|
| Messages & offers | New messages, and offers on your items. | On |
| Shop activity | New followers, favourites, and reviews on your shop. | On |
| Review requests | A reminder to review the other person after an order. | On |
| News & promotions | Occasional news, drops and offers. | On |
Everything defaults to on — the UK soft opt-in model: someone who has bought or sold through you may be emailed about similar things, provided every message carries a way out.
Transactional email is not in this list and cannot be switched off. Order confirmations, payment and payout notices, dispute correspondence and account email are service messages the recipient needs to finish something they started. They belong to no category, carry no unsubscribe link, and always send.
The set is not hard-wired — a developer can add a fifth toggle without editing the add-on.
One-click unsubscribe, without a login
An unsubscribe link that first asks somebody to log in is not really an unsubscribe link. So every marketing email carries two: a footer line reading Manage email preferences · Unsubscribe, and a List-Unsubscribe header, which lets a mail client show its own unsubscribe button beside your message. Both switch off exactly one category.
The link carries the member's id, the category and an HMAC signature made with a secret derived from your site's own salts, checked in constant time. It cannot be forged or guessed by walking through user ids, and an invalid link changes nothing.
There is deliberately no expiry: an email dug out of an archive a year later should still opt somebody out. The confirmation page does not load your theme, so it renders the same logged in or out.
Opt-outs are consent records. Uninstalling never deletes them, so reinstall later and everyone who opted out is still opted out — silently re-subscribing them would be the worst thing an uninstaller could do.
“Did that customer actually get their order email?”
This is the question. A buyer says their confirmation never arrived, and there is no way to tell whether the site sent it, the mail service rejected it, or it is in a spam folder.
The email log records when, to whom, the subject, and whether the message was accepted or rejected — covering WooCommerce order mail, WordPress core mail such as password resets, and BazaarKit's own. Read it at WordPress admin → BazaarKit → Email Log: tabs for All, Sent and Failed, plus a search box matching recipient or subject. A non-zero failed count is highlighted, so a store failing to send order email is obvious on load.
Be precise about “Sent”. It means your mail service accepted the message, not that it was delivered — bounces and spam filtering happen afterwards, invisible from inside WordPress. The log answers the otherwise unanswerable part: did this site try, and was it accepted.
Where free alternatives overlap, honestly
Logging sent email is not a scarce feature. WP Mail Logging is free and widely installed, WP Mail SMTP logs on its paid tiers, and WooCommerce is adding its own transactional email logging in version 10.9. If a log is all you need, use one of those — we would rather say so than sell you a duplicate.
How it is built, and its blind spot
The log listens after a message is handed off, so it can never alter, delay or suppress an email. The trade-off: plugins that take over delivery earlier produce no rows at all, so an empty log on a site that is definitely sending email usually means something upstream is handling it. Bodies are never stored, only subjects, and there is no resend button.
How this gates every other add-on's email
Each add-on can send email of its own. Left alone, each would need its own opt-out in its own place. Instead each asks before sending, and this one answers:
- An add-on is about to send. Messaging is emailing about a new message or an offer; Reviews is sending a review-request reminder.
- It asks the shared gate. Each publishes a documented point where anything may veto the send.
- The preference centre answers. Messaging maps to Messages & offers, review reminders to Review requests. Category off, no email.
- Transactional email is never asked. Order, payout and dispute mail bypasses the gate, so nothing can suppress it by accident.
Take the add-on away and the gate is unhooked. Nothing breaks — opt-outs simply live in several places again.
An add-on has to ask to be gated. Anything else that sends mail directly — a third-party plugin, a custom snippet — is still logged, but the preference centre cannot stop it.
What UK PECR and GDPR actually ask of you
Owners are told to be “GDPR compliant” without being told what that means for a shop's email. The practical UK picture rests on a single distinction.
Service email is not marketing. An order confirmation, a dispatch notice, a payment receipt, a dispute update, a password reset — these exist because the recipient started something and needs to know how it went. No consent, no unsubscribe link.
Marketing email is the regulated kind. Under the Privacy and Electronic Communications Regulations it generally needs consent, with the exception usually called the soft opt-in: if you obtained the address during a sale or its negotiation, you may email that person about your own similar products, provided you gave them a simple refusal at the time and in every message since. That is why a marketplace can email members without a signup checkbox — and why the opt-out must be real rather than decorative.
The UK GDPR sits alongside it: withdrawing consent must be as easy as giving it, and an opt-out honoured promptly and kept honoured. Gmail and Yahoo's bulk-sender rules separately expect a one-click unsubscribe in the headers — deliverability rather than law, pointing the same way.
A category-level preference centre satisfies all of that at once, because it puts the line in the right place. Service email stays outside the system; marketing is grouped into a few things a person can recognise and refuse individually. Someone tired of review reminders can stop those without losing their order confirmations.
This describes what the add-on provides. It is not legal advice. Which emails count as marketing, whether the soft opt-in fits how you collected an address, and what your privacy notice must say are your decisions, ideally with someone qualified. No plugin can make you compliant on its own.
Your settings, and what they change
Two settings, both about the email log — the bell and the preference centre need none. Find them at WordPress admin → BazaarKit → Settings, under Notifications & Email.
| Setting | What it does | Default |
|---|---|---|
| Record every email this site sends | Switches the log on and off. It covers WooCommerce and WordPress core mail too, not just BazaarKit's. Untick it and nothing further is recorded; existing entries stay until they age out. | On |
| Keep entries for | How many days an entry survives before it is deleted automatically. Log entries contain recipient email addresses, so this is a data-retention decision, not housekeeping. Set it to 0 to keep entries until the size limit is reached instead — useful while chasing a delivery problem, less so permanently. |
30 days |
The log is capped by size as well as age, so a runaway sending loop cannot fill your database, and you can empty it by hand from the Email Log screen.
What to change in WordPress and WooCommerce
Nothing is required. No mail service to connect, no API key, no external account — email goes out through WordPress's own mail function, so whatever already delivers your order emails carries on unchanged, and WooCommerce's email settings are untouched. Three things are worth a look:
- Your privacy notice. The log stores recipient addresses and subject lines for as long as you tell it to — personal data held for a new purpose, so the retention setting should match your policy.
- Who can read the log. The screen needs WooCommerce management permission, so shop managers can see who your site has emailed.
- Your existing mail plugin. Keep it — the two coexist, though if it takes over delivery early this log will not see those messages.
How to check it is working
- Open BazaarKit → Settings and confirm the Notifications & Email section shows real controls rather than a padlock. If padlocked, the add-on needs a licence and switching on from BazaarKit → Add-ons.
- Visit
/notifications/while logged in, and check Notifications also appears in the My Account menu and the Dokan vendor dashboard. - Trigger a real event — a message between two test accounts, or a released payout — and watch a row appear on the recipient's page.
- Open BazaarKit → Email Log, then use the “Lost password” form. It should show as Sent within seconds.
- Switch one category off in Email preferences, save, and confirm it stays off after a reload.
The live demo has the whole suite installed if you would rather see it working first.
Troubleshooting
The email log is empty, but the site is definitely sending email
Almost always another plugin is handling delivery in a way this log cannot see — some mail, SMTP and staging plugins take over before WordPress reports a result. Check that plugin's own log. Otherwise logging is off, or nothing has been sent yet.
“I unsubscribed and I am still getting emails”
Check what they are still getting. Order confirmations, payout notices and dispute email are transactional and always send — the most common version of this complaint. If it really is marketing, check which category: switching off Review requests does not stop message notifications.
A member's emails stopped and they did not unsubscribe
The same cause read backwards. A link followed by accident, or a mail client's unsubscribe button, switches off one category with no confirmation. Open their panel and switch it back on.
The Notifications page has gone, or the bell is empty
A deleted page returns on the next front-end load. An empty bell is different: notifications come from the other add-ons' events, so a site running this one alone has nothing raising them.
Frequently asked questions
Do I need this if I already use WP Mail Logging or WP Mail SMTP?
For logging alone, probably not — those do it well, and WooCommerce is adding its own transactional email logging in version 10.9. The preference centre and category-level opt-out are the parts they do not do.
Does the email log record WooCommerce order emails?
Yes, and WordPress core mail such as password resets. Anything sent through WordPress's wp_mail function is recorded.
My email log is empty but the site is definitely sending email. Why?
Some mail, SMTP and staging plugins take over delivery before WordPress reports a result, and nothing downstream can see those messages. Check that plugin's own log instead.
Does "Sent" mean the customer received the email?
No — it means your mail service accepted it. Bounces and spam filtering happen after that handoff and are only visible in your mail provider's own dashboard.
Can customers unsubscribe from order confirmations?
No, deliberately. Order, payment, dispute and account emails are service messages, not marketing. They belong to no category, carry no unsubscribe link, and always send.
Does the unsubscribe link expire?
No. It is signed with an HMAC using a site secret, so it cannot be forged or guessed, and it never expires. Following it switches off exactly one category.
What happens to people's unsubscribes if I delete the add-on?
They are kept — deleting them would silently re-subscribe everyone who had opted out. The email log table is always dropped, since nothing can read it once the plugin has gone.
Does this need Mailchimp, Brevo or another email service?
No. It uses no external service. Email goes out through WordPress's own wp_mail, so whatever already delivers your order emails carries on unchanged.
Do I need Dokan for the notification bell?
No — the page and the My Account link need only WooCommerce. With Dokan, a Notifications item carrying its unread count is added to the vendor dashboard too.
Where to go next
Give people a real choice about your email.
An in-app bell, a preference centre your other add-ons respect, and a record of everything you have sent.
See pricing Try the live demo