benecaster_membership_price_deleted
Fires after a billing cadence is removed from a tier — either by deleting the cadence outright, or by reconciliation on PUT /membership-tiers/{id} when a stored cadence is absent from the submitted prices[] array. A save that would remove a cadence a subscriber has a plan change scheduled onto is refused whole, so nothing is removed and this action does not fire.
Benecaster hooks this action itself and archives the corresponding Stripe Price. Archiving stops new checkouts against that cadence; it does not touch anyone already subscribed on it, who keeps renewing at their rate.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
$price_id |
int |
— | ID of the row that was removed. |
$price |
array |
— | The full pre-delete row, including the Stripe Price IDs — the only place to read them after deletion. |
$tier_id |
int |
— | ID of the tier the cadence belonged to. |
Example
// Warn before withdrawing a cadence that still has subscribers on it.
add_action( 'benecaster_membership_price_deleted', function ( int $price_id, array $price, int $tier_id ) {
$stripe_id = $price['stripe_price_id_live'];
if ( ! $stripe_id ) {
return;
}
error_log( sprintf(
'Benecaster: cadence "%s" withdrawn from tier %d (Stripe Price %s archived). Existing subscribers keep renewing.',
$price['cadence_label'],
$tier_id,
$stripe_id
) );
}, 10, 3 );
Notes
Deleting a tier cascades to every one of its cadences, so this fires once per cadence before benecaster_membership_tier_deleted. Order matters if your callback resolves the tier — read it from $tier_id while the tier still exists rather than querying for it later.
Need this built rather than just documented? See our services →