benecaster_follower_signup_throttled
Fires when a public [benecaster_follower_signup] submission is silently dropped for exceeding an abuse limit — 3 per email address per show per hour, or 10 per IP per hour, by default.
The submitter is told nothing, and that is the entire design. A throttled submission renders the same success screen as an accepted one, having provisioned nothing and sent nothing. This must not be “improved” into a visible too many requests message. The per-address limit would make such a message an activity oracle: submit victim@example.com, get told you are rate limited, and you have learned that somebody recently submitted that address to this site. That is a strictly worse leak than the address enumeration the identical-response rule exists to close — and it would arrive dressed as a usability fix.
This action is how a site logs or alerts on the refusal instead of displaying it.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
$show_id |
int |
— | The show whose follow form was submitted. |
$reason |
string |
— | `address` or `ip` — which limit tripped. `address` wins when both did. |
Examples
Log refusals rather than showing them
add_action( 'benecaster_follower_signup_throttled', function ( int $show_id, string $reason ): void {
error_log( "benecaster: follower signup throttled on show {$show_id} ({$reason})" );
}, 10, 2 );
Notes
Do not echo anything from a callback on this hook. It fires during the form POST, and output here would reintroduce the visible difference the silent drop exists to remove.
A legitimate person who double-submits is unharmed and may well trip this: they already received their email from the first submission, and the screen they see is the one they expected. Treat a single refusal as noise and a pattern as signal.
The limits are applied by the shortcode, so this never fires for programmatic callers — benecaster_follower_signup() and bulk enrolment are not throttled. It also never fires on the signed-in path, which sends no mail and mints no second token.
Need this built rather than just documented? See our services →