Skip to main content

benecaster_follower_signup_limits

Filter Free

Filters the abuse limits applied to the public [benecaster_follower_signup] form. Defaults: 3 submissions per email address per show per hour, 10 per IP per hour, over a one-hour window.

The IP limit is deliberately not scoped per show. A submitter working through every show on the site is the same abuse as one hammering a single show, and a per-show IP bucket would multiply their allowance by the number of shows on the install.

A limit of 0 or less disables that limit entirely. On this form that is not “unlimited signups” — the form always reports success, sends an email on every submission, and collects no password, so an unlimited version of it is an open mail relay pointed at addresses of the submitter’s choosing, on your domain and your sending reputation. If legitimate traffic is being caught, raise the number rather than removing the limit.

These are filterable and the unlicensed follower cap deliberately is not — that is not an inconsistency. The cap is a licensing gate, where a filter let a site owner grant themselves a bigger free product from a one-line mu-plugin; it shipped with one and had to have it removed. These are abuse limits on the site owner’s own form. Do not cite either as precedent about the other.

Parameters

Name Type Default Description
$limits array — `array{address_limit:int, ip_limit:int, window:int}` — submissions per address per show, submissions per IP, and the window in seconds.
$show_id int — Show being followed. Scopes the address limit, so following two shows from one mailbox is not self-throttling.
$email string — The submitted address, for per-address policy. Hashed before it becomes a rate-limit key.

Returns: array

Examples

Loosen the IP limit for one show running a signup drive

add_filter( 'benecaster_follower_signup_limits', function ( array $limits, int $show_id ): array {
    if ( 42 === $show_id ) {
        $limits['ip_limit'] = 30;
    }

    return $limits;
}, 10, 2 );

Notes

Both limits are always recorded, even once one has tripped. An early return on the address limit would leave the IP counter untouched, so an attacker cycling through fresh addresses would never accumulate against the limit actually meant to stop them.

Programmatic callers are not throttled. The limits are applied by the shortcode, not by FollowerSignup, so benecaster_follower_signup() and add-ons doing bulk enrolment are unaffected. A public form and a trusted server-side call are different exposures and deliberately do not share a limit. This is also the answer for a podcaster whose bulk import through the form stopped working: use the import tooling, which is not throttled.

The signed-in path is not throttled either. It sends no mail and a second click mints no second token, so neither abuse applies.

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