Release notes / WB Gamification
BuddyPress Add-on Plugin

WB Gamification

Universal gamification engine for WordPress and BuddyPress. Points, badges, levels, leaderboards, challenges, streaks, kudos. Pick a starter template, members start earning in 60 seconds. Works with BuddyPress, WooCommerce, LearnDash, bbPress.

12 releases
v1.6.1 latest
June 24, 2026 shipped

v1.6.1 Latest

June 24, 2026
New 4 Improve 4 Fix 5 Dev 3

New

  • Public points-spend API: wb_gam_spend_points() and wb_gam_can_afford() let other Wbcom plugins redeem points for external purchases (such as BuddyNext membership tiers) through one audited, atomic debit, firing a wb_gam_points_spent action on success.
  • Wbcom Family Kit: a new Integrations tab that guides you to related Wbcom products (WPMediaVerse, Jetonomy, BuddyNext, Learnomy, WP Career Board, WB Listora) with one-click install and activate for free members.
  • Badge share pages now generate a dynamic 1200x630 social share image per badge and earner, with Open Graph and Twitter card meta for rich link previews.
  • Block editor previews now render every block styled inside the editor canvas, and the Give Kudos block gained full editing controls and a styled preview.

Improve

  • Points settings are now grouped by the source plugin instead of by category, so each integration's points are easier to find.
  • The setup wizard is reoriented around the Wbcom family of products.
  • The badge share page is rebuilt as a polished card with copy-link and X, Facebook, and LinkedIn share actions, replacing the old browser prompt popup.
  • Family product logos in the Integrations tab render at a consistent size.

Fix

  • Async points evaluation no longer fails on busy requests. The per-request event queue is split into size-bounded Action Scheduler jobs so it never exceeds the 8000-character args limit, which previously dropped batches when many events fired at once (for example while seeding demo data).
  • Leaderboard and Top Members blocks no longer render as a silently blank block when their display is deferred to Jetonomy. Site editors now see a notice explaining the deferral and how to override it with the wb_gam_defer_leaderboard_to_jetonomy filter; visitors still see nothing.
  • The distributed zip no longer ships without the EDD Software Licensing SDK's autoloader. The release build's vendor exclude was unanchored and stripped the SDK's bundled libs/easy-digital-downloads/edd-sl-sdk/vendor/ as well, causing a fatal error on boot for sites where no other plugin loaded the SDK first.
  • The "you're N points from <level>" hub nudge no longer shows a stale count after points change. The per-user nudge cache is now cleared on every points-awarded event instead of lingering for up to five minutes.
  • Resolved a WordPress 6.7+ "textdomain loaded too early" notice from the cron schedule label.

Dev

  • Recurring jobs moved to Action Scheduler, dropping the custom WP-Cron interval.
  • Composer is no longer required at runtime; runtime dependencies ship bundled in libs/.
  • New wb_gam_og_accent_color filter to customize the badge share image accent color.

v1.5.6

June 15, 2026
Fix 3 Dev 1

Fix

  • The dashboard nudge and level progress now name the next level by the configured level order, so an out-of-order points threshold no longer points members at the wrong level.
  • Editing a level in the admin now takes effect immediately instead of waiting for the cache to expire.
  • Creating a badge through the REST API now returns the correct 201 Created status.

Dev

  • The release build fails fast when its bundled dependencies are incomplete, so a packaged zip can never ship without Action Scheduler.

v1.5.5

June 12, 2026
New 1 Improve 3 Fix 6 Dev 2

New

  • Settings > Appearance lets site owners set the accent color used across member-facing surfaces, so gamification matches the community brand instead of a fixed default.

Improve

  • Redesigned the BuddyPress activity cards (badge, level, kudos, challenge) to a single theme accent with a flat surface and a subtle edge, replacing the per-type rainbow and heavy top strip so they fit the theme.
  • Gamification activity headlines now read as a short generic verb ("earned a badge") so they no longer repeat the card beneath them.
  • Swept every admin screen for consistency: unified button styling, replaced blank navigation icons, tokenized colors for dark mode, responsive tables, and accessible tap targets.

Fix

  • Realtime points and badge toasts now arrive in about 15 seconds instead of up to a minute; the heartbeat interval was silently falling back to the WordPress default.
  • Badge artwork stays legible in dark mode; the medallion now sits on a light plate on profiles and in the activity stream.
  • Legacy activity items created before the card redesign convert to the modern card automatically on update, across all four event types, with no manual step.
  • Public profiles show "1 badge" (singular) correctly.
  • Accessible names added to the email-notification toggles and the submission reject-reason field.
  • Admin screens on WordPress 6.9+ no longer show repeated "ability category not registered" notices and the "headers already sent" warnings they caused after install.

Dev

  • Gamification abilities now register correctly with the WP Abilities API: category registration, executable callbacks proxied to the documented REST routes, permission gates per auth level, and input schemas.
  • Added a regression journey and unit test covering the activity card and generic-headline contract.

v1.5.4

June 1, 2026
New 4 Improve 1 Fix 2 Security 1 Dev 1 Compat 1

New

  • WPMediaVerse Pro competitions award the XP configured per competition (challenge placing and participation, tournament round win, and champion) instead of a flat default. The integration manifest carries each competition's id in event metadata so Pro resolves the configured amount through the wb_gam_points_for_action filter.
  • Members can set their own profile public or private. A toggle on the public profile page writes the per-user visibility choice through a new self-service REST endpoint; the read paths and GDPR export/erase already honored the setting, this adds the missing member-facing control.
  • Settings > Engagement gives site owners direct control over features that previously only had code defaults: the daily login bonus (enable plus tier ladder), streak grace days and milestone bonus, the weekly recap email (enable plus subject), the leaderboard nudge email, the four BuddyPress activity-stream event toggles, and the public-profile URL slug.
  • Settings > Points adds an event-log retention control (default 12 months) next to points-history retention, and corrects the help text that wrongly stated the event log is never pruned.

Improve

  • Declared WordPress 6.5 as the minimum (the hub block's script modules require it) and marked Tested up to 7.0 so the plugin surfaces correctly in WordPress.org search.

Fix

  • Earned badges display again. Badges awarded on 1.5.0 to 1.5.3 were stored with a broken expiry date that hid them from profiles, the Members page, and badge counts while the data stayed intact. Awards now store the expiry correctly, upgrading repairs every affected row automatically, and wp wb-gamification doctor --fix repairs it on demand.
  • Stop the early-textdomain notice triggered by translated labels in the WPMediaVerse integration manifest.

Security

  • Hardened the realtime SSE stream against event-field injection by stripping CR/LF from the event name before each event-stream record is written.

Dev

  • Removed the dead points_callback from the challenge-winner and streak triggers; the engine never consumed it, so awards already fell through to default_points.

Compat

  • Pairs with WPMediaVerse Pro 1.6.0. Install both updates together for per-competition XP to take effect.

v1.5.3

June 1, 2026
New 8 Dev 1

New

  • Settings > Access: exclude roles or specific accounts from earning points, badges, levels, and streaks (administrators, staff, support agents, bots). Excluded members keep existing points but stop accruing and are hidden from leaderboards. Enforced on every award path; filter wb_gam_user_can_earn for code-level control.
  • Members admin page (Gamification > Members): searchable, paginated roster of every member with points, level, and badges, plus per-member award, exclude/include, and reset-points actions.
  • Bulk award: grant the same points to every member of a role, or to all members at once, from the Award Points page. Excluded accounts are skipped automatically.
  • Settings > Tools: export the plugin configuration to a JSON file and import it on another site. Runtime and schema state are excluded so a config move never corrupts the target site.
  • Settings > Tools: a Rebuild leaderboard button that recomputes the snapshot and clears its caches, for when the leaderboard looks stale after a manual award or import.
  • Settings > Modules: turn off engagement modules your community does not use (kudos, streaks, challenges, community challenges, cohort leagues, redemption store). A disabled module's blocks and shortcodes render nothing and its admin page is hidden; nothing is deleted, so re-enabling restores it. Points, badges, levels, and leaderboards are always on.
  • Settings > Points: optional point expiry. Off by default. When enabled, a daily job decays the balance of members who have not earned for a chosen number of days (applied once per inactive streak), to nudge re-engagement.
  • Settings > Tools: Reset all member progress. Permanently clears accumulated member data (points, badges, streaks, kudos, leaderboards, redemptions, submissions) while keeping all configuration and definitions. Requires explicit confirmation.

Dev

  • New admin REST endpoints under wb-gamification/v1 (members collection, member exclude/reset, points bulk, tools export/import/recompute/reset-progress), all admin-gated and namespaced so they never collide with WordPress core or BuddyPress routes. New hooks: wb_gam_user_can_earn, wb_gam_module_enabled, wb_gam_progress_reset, wb_gam_points_decayed.

v1.5.2

June 1, 2026
New 7 Improve 6 Fix 5 Dev 1 Compat 1

New

  • BuddyPress profile "Achievements" tab with Overview, Badges, Points, and Streak sub-tabs. Renders the displayed member's points, level progress, streak, badges, and points history by reusing the existing blocks - viewable on your own profile and other members'.
  • WooCommerce My Account "Achievements" endpoint (/my-account/achievements/) for stores running WooCommerce without BuddyPress. Renders the member's full gamification dashboard by reusing the Hub block, with a link to the mapped Hub page. Loads only when WooCommerce is active.
  • Optional LearnDash profile "My Achievements" link to the gamification dashboard (the mapped Hub page). OFF by default; enable with add_filter( 'wb_gam_learndash_profile_link', '__return_true' ).
  • Admin setting for notification placement (Settings > Realtime): bottom-right default, plus bottom-left, top-right, and top-center, with corner-aware slide-in.
  • Filter wb_gam_sse_allowed to opt into SSE streaming on hosts provisioned for long-lived connections.
  • Reusable batch cache-prime APIs PointsEngine::prime_totals() and BadgeEngine::prime_earned_badges() for per-row listing surfaces.
  • On Jetonomy sites the leaderboard defers to Jetonomy's reputation ranking, since wb-gam already mirrors reputation 1:1 into points and the two rankings are identical. The wb-gam leaderboard and top-members blocks, shortcodes, and Hub card are hidden so members see one leaderboard. Badges are unaffected (both badge sets are kept). Filter wb_gam_defer_leaderboard_to_jetonomy to override.

Improve

  • Realtime now defaults to WP Heartbeat instead of SSE, removing a long-poll that pinned a PHP worker per logged-in page; SSE is opt-in.
  • Heartbeat polls every 15 seconds at rest (was 5), bursts to 5 seconds for 30 seconds after a member action, and nearly suspends on backgrounded tabs.
  • Member directory, leaderboard, and top-members no longer run per-row queries; query count is now constant regardless of community size.
  • Reward toasts always state what the points were for, using the action label or the admin-entered reason.
  • Frontend surfaces (Hub, blocks, member profile) map their neutral colors to the active theme's tokens, so they follow BuddyX and BuddyX Pro light and dark mode automatically; themes without those tokens keep the original light palette.
  • My Badges flyout shows two columns so each badge's art, title, and description are readable instead of cramped three-up.

Fix

  • Toast stack no longer overlaps the theme header or navigation.
  • Duplicate toasts when both SSE and Heartbeat delivered the same event.
  • Points toast showed a contextless "+N Points (M actions)" count instead of naming the action.
  • Member profile pages at /u/{username} returned 404 for everyone because public visibility required an opt-in that no screen ever set; public profiles are now on by default, and the owner and admins can always view a profile.
  • Removed em-dashes from all user-facing labels and descriptions (frontend blocks, member profile, admin settings) per house style; hyphens only. Existing seeded badge descriptions were migrated in the database too.

Dev

  • Member achievements surfaces share one renderer (WBGam\Engine\MemberSurface) with a wb_gam_member_surface_html filter, so the BuddyPress, WooCommerce, and LearnDash integrations reuse the same blocks and mapped-hub link with no duplicated display logic.

Compat

  • Jetonomy badges and reputation continue to award wb-gam points (Jetonomy badge earned, reputation change, space join, polls, messages); wb-gam adds the levels, streaks, challenges, and redemption layer on top.

v1.5.1

June 1, 2026
Fix 3 Compat 1

Fix

  • Fatal E_COMPILE_ERROR on PHP 8.1 and below. KudosEngine::send() declared a `true|WP_Error` return type; the standalone `true` literal type only exists in PHP 8.2+, so on PHP 8.0/8.1 it was parsed as a class name (WBGam\Engine\true) and crashed the site. Changed to `bool|WP_Error`.
  • Event value object used readonly properties (PHP 8.1+), breaking parsing on PHP 8.0. Properties are now plain public; immutability is enforced by convention (constructor-only writes, copy-on-change).
  • OpenApiCommand::error() used the `never` return type (PHP 8.1+); changed to `void` so the file parses on PHP 8.0.

Compat

  • Minimum supported PHP lowered from 8.1 to 8.0. CI now lints PHP 8.0 through 8.4.

v1.5.0

May 1, 2026
New 5 Improve 6 Fix 18 Security 1 Dev 3

New

  • Manual-award form on the Badge edit screen lets admins grant any rule-driven or manually-awarded badge to a chosen member without writing SQL.
  • MemberUploadCap engine grants the upload_files capability to members only while the Submit Achievement editor is rendering and during the media-upload action, so the Add Media button works for non-admins without exposing the full Media Library. Opt-out filter wb_gam_grant_member_uploads.
  • Action Scheduler circuit-breaker plus drain CLI (wp wb-gamification as drain) for sites whose actionscheduler_actions table has grown past safe limits.
  • Local-CI gate 2.13 boot-invariants detects class_exists guards above top-level class declarations (the root cause of the silent boot failure that hid the admin menu on one install).
  • Local-CI gate 2.14 enforces the seed-default-badge contract so every default badge condition (action_count, point_milestone) matches the badge name's literal action.

Improve

  • Toast notifications now use the WordPress Heartbeat fast interval (5 s) on gamification surfaces so realtime feedback feels immediate.
  • Earning Guide card layout puts the action label below the icon and points row so long action names no longer wrap vertically inside a cramped middle column.
  • Cohort Rank block gets tier-coloured accents (Bronze / Silver / Gold / Diamond) driven by a data-tier attribute and per-tier CSS variables.
  • Community Challenges block ships a proper completed-state visual treatment (green pill plus gradient card) so completed challenges read distinctly from active ones.
  • User Status Bar block uses an SVG-mask chevron toggle and exposes a theme-aware top offset so the sticky panel sits below custom theme admin bars.
  • Activity Stream block alignment tightened to match the Reign-stack social-feed conventions.

Fix

  • Point-type conversion now credits the destination currency. The conversion path previously debited the source point type but never wrote the credit (a broken transaction nesting plus a duplicate-key write), so members lost points on every conversion. Conversions now run as one atomic debit-plus-credit sharing a single audit event.
  • Badge award conditions are saved atomically. A failed save no longer leaves a badge with no condition (which silently stopped it from auto-awarding); the editor now reports an error instead of a false success.
  • API key creation verifies the key was stored before returning it, so admins are never handed a key that was never persisted and can never authenticate.
  • Submission approval only marks a submission approved once its points award succeeds; on failure the submission stays pending instead of approving with zero points awarded.
  • Admin REST writes across challenges, community challenges, levels, rules, webhooks, rewards, and badges now return a 500 on a database failure instead of silently reporting success, and multi-row deletes roll back together.
  • Deactivating the plugin now clears every scheduled cron hook, leaving no orphaned events behind.
  • Setup Wizard now triggers on first activation in CLI and one-click sandbox flows; Installer::maybe_install on plugins_loaded@0 covers restore-from-backup and container clone scenarios that bypassed the activation hook.
  • WooCommerce purchase events fire on woocommerce_payment_complete instead of woocommerce_order_status_completed so members earn points the moment the gateway confirms payment, not whenever an admin manually marks the order complete. First-purchase detection counts processing and completed orders together.
  • Redemption email events are now whitelisted in EmailSettingsController so the per-event toggle actually sends the redemption confirmation email when enabled.
  • Redemption Store block reads stock=0 as Unlimited (not Out of stock) to match the documented admin contract.
  • Hub Challenges card now surfaces in-flight community challenges alongside personal challenges and uses a panel_blocks array so the hub can mount multiple blocks per panel.
  • Community challenge bonus award no longer dead-letters; CommunityChallengeEngine listens on its own wb_gam_community_bonus_award AS hook and routes through PointsEngine::award for every contributor.
  • Completed community challenges remain visible until their expiry instead of vanishing the instant the global goal is hit; CommunityChallengeEngine::get_visible() returns active plus completed-but-not-expired entries.
  • Cohort tier names edited from the Cohort Settings admin page now flow through to the Cohort Rank block via CohortEngine::get_tier_name() which reads wb_gam_cohort_settings before falling back to the TIERS constant.
  • Duplicate toast notifications eliminated via a Set-based dedupe in assets/js/toast.js keyed on toast id or content fingerprint, closing the cursor-race that produced repeated bubbles.
  • Default badge conditions corrected to match their names: First Post, Prolific Writer, and Content Creator track wp_publish_post action_count; First Comment and Engaged Reader track wp_leave_comment action_count. Replaces the 50-points placeholder that previously fired on the wrong trigger.
  • LeaderboardNudge no longer enters infinite Action Scheduler recursion on databases where points_changed broadcasts can re-enter the dispatcher. Closes the 3.5M-row runaway encountered on one production install.
  • Class-hoist guard at the top of wb-gamification.php removed; the guard ran against an already-hoisted top-level class declaration and silently aborted boot, hiding the Gamification admin menu on affected installs. Local-CI 2.13 now prevents the regression.

Security

  • The member upload_files grant is scoped to the achievement-submission flow instead of being granted site-wide to every logged-in user, closing a privilege-escalation and storage-abuse vector on open-registration communities.

Dev

  • Admin CSS is fully tokenized: every color now resolves through the --wbgam-* design-token palette in tokens.css (zero hardcoded hex outside the token block), so a single palette edit re-themes the whole admin UI.
  • Manifest v2.2 refreshed end-to-end; audit/derived/ now caches 16 static-analysis sub-checks including the new boot-hoist-guards finder.
  • plan/ and audit/ folders consolidated; the single plan/MASTER-CHECKLIST.md replaces every dated release plan, bug-sweep spec, and UX-audit markdown that previously accumulated under plan/.

v1.4.0

May 1, 2026
New 5 Improve 7 Fix 8 Dev 2

New

  • Give-kudos block + shortcode (wb-gamification/give-kudos, [wb_gam_give_kudos]) for sending kudos from any frontend page.
  • Per-action cooldown + daily-cap admin override (Points settings table) with autosave to /actions/{id}/overrides REST.
  • ActionSchedulerCleaner daily cron prunes pending, failed, and complete action-scheduler rows older than 7 days (filter wb_gam_as_retention_days).
  • Jetonomy free integration manifest covers four previously-unrewarded events: joining a space, approval into a gated space, trust-level promotion (TL0 to TL5), and paid-membership activation (RCP / PMPro / MemberPress / WooCommerce Subscriptions / Sensei / LearnDash / MasterStudy / Tutor / LifterLMS).
  • Jetonomy Pro DM-received signal (recipient side) now earns gamification points with cooldown plus daily cap to prevent spam-DM gaming.

Improve

  • Settings dashboard container now uses 1600px max-width on wide monitors and consolidates a duplicate .wbgam-wrap rule.
  • Challenges and Community Challenges admin pages unified under a single Challenges menu entry with Individual / Community tabs.
  • Async award flag dropped on five low-volume BuddyPress + WPMediaVerse actions so points update synchronously without Action Scheduler delay.
  • Admin notices now render above the WB Gamification chrome instead of being visually trapped inside .wbgam-wrap.
  • Configure Points and Top Actions dashboard links route to the in-page Points tab via hash anchor instead of broken query-string routing.
  • Leaderboard rows now show points-with-icon and badges-earned count next to each member; member directory entries now display Level, Points, and Badge count instead of just the level name.
  • JetonomyIntegration class no longer registers three filter listeners (jetonomy_reputation_points_map, jetonomy_reputation_pre_change, jetonomy_leaderboard_items) that have no emit sites in upstream Jetonomy 1.4.4. Listeners were dead wiring; removal clears confusion about which contracts the integration actually honors. Sandbox veto via wb_gam_sandboxed user meta now runs on the working jetonomy_reputation_changed mirror path instead.

Fix

  • LeaderboardNudge no longer enqueues duplicate Action Scheduler jobs for the same user; a runaway loop on long-running sites is contained by the new as_has_scheduled_action guard.
  • Challenge time queries use UTC_TIMESTAMP() instead of NOW() so UTC-stored start and end columns activate at the correct moment on servers with a non-UTC MySQL session timezone.
  • datetime-local admin inputs hydrate UTC values into the browsers local time on page load so the Challenges and Community Challenges edit forms no longer drift the saved time by the timezone offset on every edit.
  • Level-up and streak-milestone toasts now include a translated message string so the toast bubble is no longer empty.
  • ChallengeEngine duplicate do_action removed so BP activity rows, webhook deliveries, and emails fire once per challenge completion instead of twice.
  • KudosController create_item resolves recipient_login (username or email) server-side for the new give-kudos block; receiver_id remains supported.
  • BuddyPress activity filter labels now expose four distinct entries (Badge earned, Level up, Kudos sent, Challenge complete) instead of collapsing into one Gamification row; sites can override via the wb_gam_activity_context_label filter.
  • Gamification top-level admin menu icon now renders on every wp-admin page (Lucide font + the icon-paint CSS rule are enqueued globally so the icon does not disappear when viewing Posts, Pages, Tools, etc.).

Dev

  • New wb_gam_as_retention_days filter (default 7) to tune Action Scheduler retention per site.
  • New wb_gam_activity_context_label filter exposes BP activity context labels for per-type customisation.

v1.3.0

May 1, 2026
New 4 Fix 3

New

  • Jetonomy 1.4.3 reputation and leaderboard integration.
  • Jetonomy Pro event triggers for polls, direct messages, badges, and reactions.
  • WPMediaVerse Free and Pro integration manifests shipped in-tree so the host site no longer carries the manifest layer.
  • Engine now fires wb_gam_award_skipped from every silent-skip path so integrations can react to skipped awards.

Fix

  • Points history view renders the manifest label instead of the raw action_id.
  • WPMediaVerse handlers use upstream hook arguments instead of a broken static lookup.
  • Boot path shows an admin notice instead of a fatal error when vendor/ is missing.

v1.2.0

May 1, 2026
New 1 Improve 2 Dev 1

New

  • EDD SDK integration for automatic plugin updates from wbcomdesigns.com.

Improve

  • Consolidated admin stylesheets into a single admin.css.
  • Populated admin dashboard with KPI cards, top actions, top earners, and a daily sparkline.

Dev

  • submit-achievement view.js is translation-ready.

v1.0.0

Note 20

Note

  • First public release.
  • sourced points engine with 30+ auto-detected actions across 10 integrations.
  • 30 pre-built badges with point milestone and action count auto-award conditions.
  • 5-level progression system (Newcomer to Champion) with configurable thresholds.
  • Leaderboard with snapshot caching, group scoping, and 4 time periods.
  • Individual challenges with admin manager, bonus points, and date ranges.
  • Daily streak tracking with grace period, 7 milestones, and bonus rewards.
  • Peer kudos with daily limits, receiver/giver points, and feed display.
  • 17 Gutenberg blocks and 15 shortcodes for frontend display.
  • REST API with 65 endpoints across 24 controllers.
  • site gamification center mode.
  • WP Abilities API registration (12 abilities) for AI agent discovery.
  • 9 first-party integration manifests (BuddyPress, bbPress, WooCommerce, LearnDash, LifterLMS, MemberPress, GiveWP, The Events Calendar).
  • Setup wizard with 5 starter templates (Blog, Community, Course, Coaching, Nonprofit).
  • Modern admin UI with sidebar navigation, card layout, and field descriptions.
  • Analytics dashboard with 6 KPI cards, top actions/earners, daily sparkline.
  • Toast notifications via Interactivity API and REST polling.
  • CLI commands: points, member, actions, logs, export, doctor.
  • compliant data export and erasure.
  • 60+ pages of documentation at docs/website/.