Skip to content

Notification Preferences ​

Notification Preferences gives members a frontend screen listing every notification your site sends, against the channels it can send them through. They untick what they don't want, and the site stops sending it.

Overview ​

Voxel lets you decide, site-wide, which notifications exist and which channels they use. What it doesn't offer is a way for an individual member to say "email me about orders, but stop emailing me every time someone follows me."

This function adds that, as a matrix of app events against channels, and enforces the result server-side — including for notifications Voxel itself sends, not just Toolkit ones.

Key Features ​

  • A member-facing matrix of every enabled app event against its channels
  • Covers email, in-app, push and SMS
  • Enforced server-side on all four channels
  • The widget can only ever narrow what admins allow
  • Events or channels disabled in the admin never appear to members
  • Site-wide and per-widget exclusions keep critical events out of members' hands
  • Push and SMS columns appear only when those functions are enabled

Setup Instructions ​

Step 1: Enable the Function ​

  1. Navigate to Voxel Toolkit → Functions in your WordPress admin
  2. Find Notification Preferences and toggle it on

Step 2: Enable the Widget ​

  1. Navigate to Voxel Toolkit → Widgets
  2. Enable Notification Preferences (VT)

Step 3: Add It to a Template ​

Add the Notification Preferences (VT) widget to a logged-in template — your account or profile page is the natural home, next to whatever other member settings you offer.

Step 4: Decide What Members Can Change ​

In the function's settings, use Excluded events to keep specific notifications off the widget entirely. Anything excluded is never shown and never opted out of.

Exclude the notifications a member must receive: password resets, order receipts, anything with a legal or transactional obligation behind it. The widget is for preferences, not for switching off the things that keep your site honest.

The same exclusion control exists on the widget itself, so different templates can offer different subsets.

How It Interacts With Admin Settings ​

The widget only ever narrows. It cannot enable anything an administrator has turned off.

  • An app event disabled in Voxel → App Events doesn't appear
  • A channel disabled for an event doesn't appear as a column for it
  • An excluded event doesn't appear, regardless of its own settings

So the member's view is always a subset of what the site already permits, and turning a notification off site-wide immediately removes it from everyone's preferences.

Channels ​

ChannelAppears when
EmailAlways
In-appAlways
PushThe Push Notifications function is enabled
SMSThe SMS Notifications function is enabled

Troubleshooting ​

An Event Isn't Listed ​

Either it is disabled in Voxel → App Events, or it is in the function's Excluded events list, or the widget itself excludes it. The widget never invents events — it lists what the site already sends.

A Member Still Got a Notification They Unticked ​

Preferences are enforced when the notification is sent. A message already queued before the change can still arrive. If it keeps happening for one event, check whether that event is excluded — excluded events ignore preferences by design.

The Push or SMS Column Is Missing ​

Those columns only render when the corresponding function is enabled. Enable Push Notifications or SMS Notifications first.

Translating Event Names ​

The event and category names in the widget — "New order placed by customer", "Order approved by vendor" and the rest — come from Voxel, which returns them as plain English text with no translation function behind them. They were only ever meant to be seen in the admin, so a .po file or Loco Translate has nothing to hook onto.

Rename them (works with any translation plugin) ​

Since 1.9.2 the function's settings list every event and section heading the widget shows, each with a box you can type your own wording into. Leave a box empty to keep Voxel's wording.

This is the route to use with Loco Translate, or on any site running a single language — there is no catalog for Loco to work from, so renaming is the translation. On a multilingual site, rename first if you want different base wording; what you type is what WPML and Polylang then offer to translate.

Register them with WPML or Polylang ​

Since 1.9.1 the Toolkit registers them itself:

  • WPML — they appear in String Translation under the context Voxel Toolkit — Notification preferences.
  • Polylang — they appear under Languages → Translations in the same group.
  • Anything else — rename them as above, or use the filter:
php
add_filter( 'voxel_toolkit/notification_preferences/label', function( $label, $name ) {
    // $name is 'event:<event key>' or 'category:<category key>'
    $translations = [
        'event:products/orders/customer:order_placed' => 'Nuovo ordine effettuato dal cliente',
        'category:products'                           => 'Prodotti',
    ];

    return $translations[ $name ] ?? $label;
}, 10, 2 );

Requirements ​

  • Voxel theme
  • Elementor, for the widget
  • Push and SMS columns require their respective Toolkit functions

Built by Code Wattz.