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_LENGTH — 240
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.