WB Ad Manager Pro 1.5.0 is live on store.wbcomdesigns.com. This is the largest release since 1.0 and it changes how WB Ad Manager Pro presents itself to a site owner on day one.

WB Ad Manager Pro 1.5.0 self-serve advertiser portal where members top up credits and run their own campaigns

If you have been running 1.4.0, three things will stand out the first time you activate WB Ad Manager Pro 1.5.0: the setup wizard, the Site Mode picker, and the amount of admin UI that quietly disappears when you pick a mode that does not need it. Those three choices are tied together, and the rest of this post explains why.

Before I walk through what shipped, some honesty about what it took to get here. In WB Ad Manager Pro 1.4.0 we had a fresh-install fatal that I personally reviewed and missed. The release went out, a customer on InstaWP found it within an hour, and the first feature-complete customer install of 1.4.0 was me patching it in production. 1.5.0 is a bigger release with a lot more moving parts, which means more surface area for that kind of mistake. So before I shipped WB Ad Manager Pro 1.5.0 I wrote a release builder that catches the exact class of bug 1.4.0 had, and then some. More on that below. First, the upgrade.


Five Site Modes in WB Ad Manager Pro

The most common piece of feedback on 1.4.0 was: “this plugin does a lot of things and I only want two of them.” The admin surface assumed every installer wanted ads AND classifieds AND the portal AND link partnerships. If you just wanted a classifieds marketplace, the admin was still full of ad-centric cards, package tiers, and A/B testing UI you were never going to use.

WB Ad Manager Pro 1.5.0 introduces five explicit Site Modes, pickable during setup and switchable anytime from Pro Settings > General. Each mode preserves your data and only changes which parts of the admin are visible.

Publisher mode

For sites where the admin places every ad themselves. Think editorial sites with a small ops team. The advertiser portal, classifieds, and wallet UI are all hidden. There is an impressions-only analytics option that strips Clicks, CTR, and Spent tiles for sites that only care about reach, which is most publishers running brand-awareness deals, not performance ads.

For sites where advertisers submit ads through the portal but billing stays offline or contractual. The portal is visible, advertisers can submit creatives and track performance, but the wallet is hidden. You handle the invoicing in your normal accounting flow.

The full self-serve model. Advertisers register, top up credits through the Credits SDK, and launch campaigns without touching wp-admin. You review submissions and collect the money. This is the mode most customers will land on if they want to monetize community traffic without an ad sales team.

Classifieds Marketplace mode

Listings-first. No paid ads, no link partnerships. The Overview dashboard shows Active Listings instead of ad KPIs. Everything in the admin that is not about classifieds gets hidden, including the ad-centric stat cards that used to confuse classifieds operators in 1.4.0.

Full Platform mode

Everything on. The original 1.4.0 experience. Available for sites that genuinely run all four revenue streams.

Switching modes never deletes data. If you go from Full Platform back to Publisher, your campaigns are still there, just hidden behind a toggle you can flip back on.

The plugin also auto-flips to a “Custom” mode if you manually edit module toggles after picking a preset, with a “Reset to previous” path so admins never feel trapped by a preset that no longer fits. The visual indicator in Pro Settings always tells you which preset you are closest to, so there is no confusion between “I picked Publisher” and “I picked Publisher and then turned classifieds on.”

There is also a new per-advertiser billing mode flag (self-serve or managed). A single site can run wallet-based advertisers alongside admin-assigned contract advertisers. The portal UI adapts per-advertiser: managed advertisers see “Contract: N impressions / N clicks / N days” instead of wallet balance and credit packs. Public registration is disabled in Publisher, Sponsored, and Managed configurations so the portal URL only works for admins and invited members.


A complete membership state machine

WB Ad Manager Pro 1.4.0 shipped membership plans for classifieds (gate listing quotas, featured upgrades included, listing duration) but the lifecycle was minimal, subscribe, cancel, done. That might work for a first launch, but it is not enough for a site charging $10, $20, $50 a month from real customers. Real memberships have a state machine.

WB Ad Manager Pro 1.5.0 implements the full state machine:

StateWhat it meansWhat triggers it
ActiveCurrent paid member, all benefits availableSubscribe or renew
Cancelled (ending)Benefits still active until the current period endsCancel at period end
ExpiredBenefits removed, plan archivedPeriod ends with cancel flag
Past-dueRenewal failed, grace window activeRenewal webhook returns failure
SwitchingMoving to a different plan with prorated refundPlan change from portal

Specifically:

  • Subscribe to a plan via the portal
  • Switch between plans with prorated refund, using round-half-up instead of floor so a same-day switch gives back the full plan price instead of losing a credit to sub-second timestamp drift
  • Cancel at period end, benefits stay active until the current paid period ends, not the moment cancel is clicked
  • Reactivate while cancelled, revert the scheduled cancellation without paying again
  • Past-due grace window for failed renewals, with a clear CTA banner in the portal telling the member exactly what to do

The portal UI is state-aware throughout. Cancelled and past-due banners. Dynamic plan-card buttons that say “Subscribe”, “Switch to this plan”, “Current Plan”, or “Current Plan (ending)” depending on where the member is in their lifecycle. Seven dedicated HTML email templates for subscribe / switch / cancel / reactivate / payment-failed events, all editable from the admin.

The race condition we had in 1.4.0 where two concurrent subscribe requests could double-charge is gone, the whole subscribe path is now wrapped in a DB transaction with SELECT ... FOR UPDATE row locking.


3-step setup wizard in WB Ad Manager Pro

New installs of WB Ad Manager Pro now open a 3-step wizard on first activation:

  1. Site Mode. Pick one of the five above. The wizard previews what will be shown and hidden so the choice is not a black box.
  2. Credits SDK adapter. Pick the billing plugin you already have configured, WooCommerce Products, WooCommerce Subscriptions, WooCommerce Memberships, Paid Memberships Pro, or MemberPress. Manual / bank-transfer top-ups also available for offline payments.
  3. Pages. Confirm which pages the plugin should auto-create (Dashboard, Classifieds). Previously we auto-created 5 pages; now we only create the 2 that are actually essential.

Ninety seconds to a working site. The wizard text and viewport are now sane at 100%, 125%, and 150% browser zoom (they were not before, wizard rendered oversized and the viewport became unscrollable at zoom levels most admins use on smaller laptops).

The 1.4.0 fatal, and how it cannot happen again

This is also where the biggest embarrassment of WB Ad Manager Pro 1.4.0 lived. On some fresh installs, the Site_Mode class was not loaded in the installer, and activation would fatal before the admin ever saw a UI. The root cause was a class require missing from the install routine, simple code bug, real customer impact.

Our release builder now scans every PHP file in the plugin for string-literal require targets, including references that use WBAM_PRO_PATH, __DIR__, plugin_dir_path(__FILE__), and similar anchors. If the builder finds a reference to a file that is not in the zip, the build fails. Period. The same scanner also catches missing CSS, JS, and image assets.

It has already caught four latent bugs in other parts of the plugin since we turned it on. One of them was a classifieds API returning assets/images/placeholder.png as the fallback image URL for listings without a featured image, the file had never been committed. Every classified without an image was serving a 404. The builder flagged it on the first run.

The builder is why I am comfortable shipping WB Ad Manager Pro 1.5.0 as a “major upgrade” without a 2-week stabilization period. It is how we keep the duct-tape-phase problem from becoming a “customer site down” problem.


Classifieds in WB Ad Manager Pro: direct messaging, sort, reminders

Classifieds used to be a one-way experience, listing goes up, inquiries come in, admin responds through email. WB Ad Manager Pro 1.5.0 adds direct messaging on classified pages so buyers and sellers have a real conversation view inside the portal. No external email threads. No lost leads. The inquiry form and the message thread are the same object, rendered in chat-style bubbles, with both sides getting email notifications on new messages.

Browse pages now support sort options (newest, oldest, price low/high, featured first) which is embarrassing to call out as a 1.5.0 feature but the first version of browse did not have sort and customers have been asking for it since December. The single-listing page shows a seller info card with avatar, trust indicators, and contact button. Classifieds get expiry reminder emails configurable by days-before-expiration so sellers can renew before their listings drop off the browse grid.


Demo data that actually demos the plugin

The previous demo data generator created blank posts and placeholder categories. Activating WB Ad Manager Pro, clicking “Generate Demo Data,” and being left with a site that looks like an empty staging environment is the opposite of demoing. 1.5.0 replaces it with real stock images for 12 sample ads and 10 classifieds, seeds a campaign per ad, links taxonomy terms correctly, and removes everything cleanly on uninstall. One click to see the plugin running with realistic content. Two clicks to remove every trace.


On billing in WB Ad Manager Pro: the honest answer

WB Ad Manager Pro does not ship its own Stripe, PayPal, or Razorpay integration. It ships the Wbcom Credits SDK with 5 adapters: WooCommerce Products, WooCommerce Subscriptions, WooCommerce Memberships, Paid Memberships Pro, and MemberPress. Credit top-ups flow through whichever payment gateway your billing plugin already has configured.

This is a deliberate design choice, and it is the choice I get the most questions about. Let me spell out the reasoning.

You already have a gateway set up for your other products. If you run WooCommerce, you already have Stripe or PayPal configured, tax rules dialed in, webhook endpoints pointing at the right URLs, refund logic working the way your accountant expects. If I wired a second payment stack into WB Ad Manager Pro, you would have two webhook endpoints to manage, two sets of refund flows, two places to configure taxes, two gateways to keep credentials current on.

Instead, the Credits SDK approach is: the portal asks your billing plugin to sell a Credit Pack product (or gate it behind a membership level), the gateway takes the money, and the SDK credits the advertiser wallet when the order completes. One gateway. One refund flow. One tax configuration. Your accountant keeps using the same tools.

The trade-off is setup: if you do not already have WooCommerce, Subscriptions, Memberships, PMPro, or MemberPress, you need to install one before the Pro portal is useful for paid ad sales. For sites that already run a membership or WooCommerce storefront (most of our customer base), this is zero additional infrastructure. For sites that do not, WooCommerce is free and gets you there in under an hour.

Manual and bank-transfer top-ups are also supported for offline payments, with an admin approve / cancel flow. Useful for enterprise accounts or sites that want to handle their first few advertiser relationships by hand before scaling into self-serve.


30+ bug fixes in WB Ad Manager Pro 1.5.0

The full list is in the changelog, but the ones most likely to have bitten you in 1.4.0:

  • Toast notifications were silently broken since 1.0. A nested block comment closed the outer JSDoc early, so window.wbamToast was never defined and every success / error / confirm toast fell back to native browser dialogs (or nothing, depending on the script). Fixed the syntax and added the missing dependency across 10 consumer scripts.
  • Ad edit form now pre-fills correctly when the ad was saved with the legacy meta-key convention (demo data, classic wizard). Title, image preview, Click URL, and alt text all populate.
  • My Ads cards show real view and click counts (previously always zero). Now reads from wbam_analytics_daily instead of stale post meta that the tracker never populated.
  • Portal Inquiries tab rendered blank because of a user_id vs advertiser_id mismatch. Two columns that look similar, a join that was using the wrong one, classic.
  • Setup wizard oversized text and unscrollable viewport at 125% and 150% browser zoom. Both fixed.
  • Missing wbam_get_placements() function that caused a fatal on the ad submission form when a specific module was disabled.
  • Geolocation map now shows for all users (not just non-owners). Duplicate location text removed.
  • Package placement inheritance: ads now display at package-configured placements correctly.
  • Ads tab pagination: pager links no longer 404 inside the WP_Query loop.
  • Campaign status syncs to the ad enabled flag. Paused campaigns stop showing ads (they didn't before, which is the kind of bug that quietly burns ad budget).

Developer improvements in WB Ad Manager Pro 1.5.0

For anyone building on top of WB Ad Manager Pro, 1.5.0 is the DX pass I have been wanting to ship for a year:

  • 25+ new public hooks documented in docs/HOOKS.md. wbam_pro_before_/after_ filters and actions on Advertiser, Campaign, Classified, and Package managers, intercept writes, validate data, subscribe to post-commit events without forking core.
  • Ad submission wizard action slots. Four wbam_pro_ad_form_step_N_after_fields action slots plus a wbam_pro_before_submit_ad filter. Inject custom fields without touching core templates.
  • REST response-shape filters on Packages and Classifieds APIs (wbam_pro_rest_prepare_*). Add custom fields or transform payloads before they leave the server. Previously this required overriding the entire endpoint.
  • Cross-plugin settings bridge. A new Settings_Helper::get_free() method with the wbam_pro_free_setting_{key} filter. Graceful fallback when the Free plugin is deactivated, Pro no longer crashes if Free is removed mid-session.
  • Performance pass. Rotation_Engine memoizes settings per request, cutting redundant autoload lookups on ad-dense pages (like a community activity stream showing 8 placements).
  • Settings-API registration for 12 options that were previously unsanitized direct writes (license key, credits URL, module config blobs, page IDs). All now go through proper sanitize_callback.

Security pass

Two items that did not break anything but were the kind of thing that breaks eventually:

  • Replaced bare __return_true REST permission callbacks with named REST_Permissions helpers that gate on module enable state and emit WP_Error on denial. Previously, a REST call to a disabled module would return 200 with an empty body; now it returns a proper 403 with a reason.
  • Registered 12 previously-unsanitized options via Settings API with proper sanitize_callback (license key, credits URL, module configs, page IDs).

Compatibility

WB Ad Manager Pro 1.5.0 is tested up to WordPress 6.9.1 and PHP 8.4. Works with PHP 7.4 onwards. All the usual suspects on the integration side: BuddyPress, bbPress, Jetonomy, WooCommerce, Subscriptions, Memberships, PMPro, MemberPress, and any theme that follows normal WordPress hook conventions.


Who should upgrade WB Ad Manager Pro right away

Not every release is a “drop everything and upgrade now” release. WB Ad Manager Pro 1.5.0 is, for these specific cases:

  • You run membership-gated classifieds. The old lifecycle would quietly double-charge or lose prorated refunds on plan switches. 1.5.0 wraps subscribe / switch / cancel in a transaction with row locking and prorates correctly. This is the single most important fix for anyone charging monthly fees.
  • Your setup wizard never rendered correctly. If you installed Pro at 125% browser zoom and thought the wizard was broken, it was, that bug bit every laptop admin in 1.4.0. 1.5.0 renders cleanly at every zoom level.
  • Your admin screen shows features you do not use. Classifieds-only sites finally get a classifieds-only admin, not the full platform UI with grey-for-you-tiles. Publisher mode sites drop the advertiser portal cards entirely.
  • You build on top of Pro. Twenty-five new hooks, four wizard action slots, REST response filters, a cross-plugin settings bridge. If you have been forking Pro to inject custom fields, you probably do not need to fork anymore.

If none of the above applies and you are on 1.4.0 without any of the bugs listed in the changelog, you can wait a week to see if customers surface anything else, then upgrade. The release builder caught the ones we could catch automatically, but there is no substitute for customer installs on real traffic.


Upgrading to WB Ad Manager Pro 1.5.0

Pro updates via the licensed in-plugin updater or from your Wbcom Designs account. Free (2.8.0) updates via the WordPress.org updater.

The database migration runs automatically on activation. It is idempotent and tested against 1.4.0, 1.3.1, 1.3.0, 1.2.1, and 1.2.0 data. If you are coming from a version older than 1.2.0, upgrade to 1.2.0 first (via Wbcom Designs account) then take 1.5.0. The long-hop migrations got retired in 1.3.0 so very old installs need to go through the stepping stones.

If you are a new customer considering the upgrade from free-only, the store pages have a live InstaWP sandbox link. Click it, get a running WordPress install with WB Ad Manager Pro activated and demo data seeded, kick the tires for 30 minutes, then decide. No card required for the sandbox.

If you run a community site and you have been thinking about monetizing through sponsored content, the patterns that actually work for community monetization are mostly about trust and control, giving your members a way to run their own ads without surrendering editorial control. That is the thing the advertiser portal is built for.

The honest version of monetization is not running more ads. It is letting your members run their own ads through your site, with quality control on your side, and collecting the revenue for the traffic you built.


Pricing for WB Ad Manager Pro

WB Ad Manager Pro pricing did not change in 1.5.0. The three tiers remain:

PlanSitesAnnualLifetime
Personal1$59/yr$199
Professional5$129/yr$299
AgencyUnlimited$299/yr$499

All plans include the full WB Ad Manager Pro feature set, 1 year of updates and priority support, and a 30-day money-back guarantee. Agency licenses are used for client deployment under the standard Wbcom Designs license terms.


If you want the short version of what this plugin is and why I built it as one plugin instead of three, I wrote a separate introduction to WB Ad Manager that covers the three modules and the use cases in about 10 minutes of reading. For the deep dive on specifically what shipped in 1.5.0, this post is it.