benecaster_subscriber_feed_inactive
Fires once per inactivity event, from the daily engagement check, when an active subscriber’s podcast app has not polled their feed within the show’s inactivity threshold: the Feed inactivity threshold in Show Settings → Subscription (default 30 days), then the benecaster_subscriber_engagement_threshold filter, which can raise or lower it. benecaster_get_engagement_threshold() returns the value the check uses.
When the threshold is crossed, the token’s engagement_status transitions from 'active' to 'at_risk', and this hook fires once. It does not re-fire on subsequent cron runs until the subscriber reactivates (triggering benecaster_subscriber_feed_reactivated) and goes inactive a second time. Tokens whose last_accessed_at is NULL — representing subscribers who have never added the feed to a podcast app — are excluded and handled separately by benecaster_subscriber_never_accessed and benecaster_token_first_accessed.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
$user_id |
int |
— | WordPress user ID |
$show_id |
int |
— | ID of the show |
$tier_slug |
string |
— | The token's stored tier — `follower` for a follower, the subscriber's tier otherwise. The same value all four engagement hooks pass; to classify the listener, use benecaster_get_token_type(). |
$days_inactive |
int |
— | Number of days since last feed access |
Examples
Tag inactive subscriber in email platform
add_action( 'benecaster_subscriber_feed_inactive', function (
int $user_id,
int $show_id,
string $tier_slug,
int $days_inactive
): void {
$user = get_userdata( $user_id );
if ( ! $user ) {
return;
}
my_esp_add_tag( $user->user_email, 'podcast-at-risk' );
my_esp_trigger_sequence( $user->user_email, 're-engagement', [
'show_id' => $show_id,
'days_inactive' => $days_inactive,
] );
}, 10, 4 );
Notes
The podcaster sets the threshold per show in Show Settings. A monthly show has a naturally longer listening cadence than a daily one, so that setting is the first place to adjust it; the benecaster_subscriber_engagement_threshold filter overrides it in code.
Need this built rather than just documented? See our services →