Skip to main content

SupporterWallManager

Benecaster\SupporterWall\SupporterWallManager

Manages the per-subscriber opt-in flag and “Why I support” message for the Supporter Wall. Ships in feature/internal-membership-supporter-wall; message methods added in feature/membership-launch-cleanup.

Third-party callers should use this class rather than reading the underlying user meta directly — the class is the canonical interface and its method signatures are considered stable API.

Constants

SupporterWallManager::META_KEY_SUBSCRIBER_VISIBLE'_benecaster_subscriber_wall_visible'

The WordPress user meta key where the opt-in flag is stored ('1' = opted in, '0' = opted out, missing meta = opted out).

SupporterWallManager::META_KEY_SUBSCRIBER_MESSAGE'_benecaster_subscriber_wall_message'

The WordPress user meta key where the subscriber’s “Why I support” message is stored.

SupporterWallManager::MESSAGE_MAX_LENGTH240

Maximum character length enforced by set_subscriber_message() via mb_substr().

Methods

is_subscriber_visible( int $user_id ): bool

Returns true when the subscriber has opted in to appear on the Supporter Wall. Reads _benecaster_subscriber_wall_visible user meta; returns false when the meta is missing or '0'.

$manager = new SupporterWallManager();
if ( $manager->is_subscriber_visible( $user_id ) ) {
    // include in wall query
}

set_subscriber_visible( int $user_id, bool $visible ): bool

Writes the opt-in flag and fires the benecaster_subscriber_wall_visible action. Returns true on success.

Important: The action fires on every call, including same-value writes. This is intentional — listeners that audit subscriber consent re-confirmation events (e.g. GDPR consent log) can observe every explicit save, not just transitions.

$manager = new SupporterWallManager();
$manager->set_subscriber_visible( $user_id, true );  // opt in
$manager->set_subscriber_visible( $user_id, false ); // opt out

get_subscriber_message( int $user_id ): string

Returns the subscriber’s “Why I support” message from _benecaster_subscriber_wall_message user meta. Returns an empty string when the user does not exist or the meta is not set.

Note: The empty case is intentionally indistinguishable from an explicit clear — callers cannot tell whether a message was never entered or was deleted.

$manager = new SupporterWallManager();
$message = $manager->get_subscriber_message( $user_id );
if ( $message !== '' ) {
    // render message on wall
}

set_subscriber_message( int $user_id, string $message ): bool

Saves the subscriber’s “Why I support” message. Applies sanitize_textarea_field() and truncates to MESSAGE_MAX_LENGTH (240 characters) via mb_substr(). Returns false when $user_id <= 0.

Fires benecaster_subscriber_wall_message after every write, including same-value writes.

$manager = new SupporterWallManager();
$manager->set_subscriber_message( $user_id, 'I love this podcast!' );

is_supporter_wall_message_enabled_for_user( int $user_id ): bool

Returns true when at least one of the user’s active-token shows has both _benecaster_show_supporter_wall_enabled = 1 and _benecaster_show_supporter_wall_show_why_field = 1.

Used by AccountController as the 403 gate for message write requests, and by AccountShortcode to decide whether to render the “Why I support” textarea in the account page.

$manager = new SupporterWallManager();
if ( $manager->is_supporter_wall_message_enabled_for_user( $user_id ) ) {
    // render textarea
}

Actions

benecaster_subscriber_wall_visible

Fired by set_subscriber_visible() after every write:

do_action( 'benecaster_subscriber_wall_visible', int $user_id, bool $visible );

See [benecaster_subscriber_wall_visible](/docs/benecaster_subscriber_wall_visible/) for usage examples.

benecaster_subscriber_wall_message

Fired by set_subscriber_message() after every write, including same-value writes:

do_action( 'benecaster_subscriber_wall_message', int $user_id, string $message );

$message is the sanitized, truncated value as stored — not the raw input.