Skip to main content

React when a new membership tier is detected without a Benecaster mapping

Premium Beginner

Fires when a new tier appears in the membership plugin without a matching Benecaster tier mapping. The built-in admin notice already reacts to this action; this recipe adds supplementary Slack alerting so the admin doesn’t miss it. Debounce if needed — it fires on every event where the mapping is absent.

When This Is Useful

An unmapped tier means some people may hold active memberships that Benecaster doesn’t know how to handle. On every membership plugin Benecaster supports, a signup at a level with no mapping is ignored: no feed URL is issued and no welcome email is sent. A subscriber whose plan moves onto that level is not moved either. This is worth alerting on promptly. Common uses:

  • Slack / email alert to the site owner so they know to visit Settings → Subscription

  • Audit log to track when new tiers appear, useful in multi-admin setups

How It Works

The action passes the external tier ID and the slug of the bridge that reported it. Two responses are worth building:

  • A Slack alert, debounced. Key a transient on both the bridge slug and the tier ID, bail if it’s already set, then post the webhook non-blocking so the alert never holds up the request that triggered it. Include a link to Settings → Subscription so the recipient can act immediately.

  • An audit log entry. Insert a row into your own table on every occurrence, deliberately without a debounce — for multi-admin sites the repeat detections are the signal.

Notes

It fires from two places. Most detections are immediate, the moment a tier is saved in the membership plugin. Bridges that cannot report a save as it happens are covered by a daily sync instead, so a tier that slips past the immediate path is caught within 24 hours either way. Your callback cannot tell the two apart, and should not need to.

Debounce when alerting. A tier that is re-saved in the membership plugin fires this action again each time while it remains unmapped. Use a transient as a debounce gate, keyed on both the bridge slug and the tier ID.

Creating the mapping for the subscriber is not available to add-on code. There is no public, documented route to write a tier mapping, so the supported responses are the two above — alert a human, and let them map it in Settings → Subscription.

The built-in admin notice still fires. Your callback is additive — Benecaster’s own notice system handles surfacing the alert in the dashboard. You’re supplementing it, not replacing it.

Related

Code

<?php
add_action( 'benecaster_tier_unmapped', function ( $tier_id, string $plugin_slug ): void {
    $message = sprintf(
        'New %s tier (ID: %s) detected — no Benecaster mapping found. Visit Benecaster settings to map it.',
        $plugin_slug,
        $tier_id
    );
    wp_remote_post( MY_SLACK_WEBHOOK_URL, [
        'body'    => wp_json_encode( [ 'text' => $message ] ),
        'headers' => [ 'Content-Type' => 'application/json' ],
    ] );
}, 10, 2 );

View on GitHub →

Hooks Used

Need this built rather than just documented? See our services →