Skip to main content

benecaster_episode_auto_number

Filter Free Since v1.0.0

Filters the auto-assigned episode number when an episode with no existing number is first published. The default computed value is `max(existing episode numbers for this show) + 1`, or `1` if no numbered episodes exist yet.

Return `0` to suppress auto-numbering entirely — the episode will be saved without an episode number. Auto-numbering applies to Full episode types by default; Trailer and Bonus episodes do not receive automatic numbers. Setting a number manually in the episode editor before first publish prevents this filter from firing for that episode.

Parameters

Name Type Default Description
$next int Computed next episode number (max existing + 1, minimum 1)
$episode_id int ID of the episode
$show_id int ID of the show

Returns: int

Examples

Skip auto-number for bonus and trailer

add_filter( 'benecaster_episode_auto_number', function( $next, $episode_id, $show_id ) {
    // Skip auto-numbering for bonus and trailer episodes.
    $type = get_post_meta( $episode_id, '_benecaster_episode_type', true );
    if ( in_array( $type, [ 'bonus', 'trailer' ], true ) ) {
        return 0; // 0 suppresses auto-numbering.
    }
    return $next;
}, 10, 3 );

Suppress for non-full episode types

add_filter( 'benecaster_episode_auto_number', function (
    int $next,
    int $episode_id,
    int $show_id
): int {
    $type = get_post_meta( $episode_id, '_benecaster_episode_type', true );

    if ( 'full' !== $type ) {
        return 0; // 0 = skip auto-numbering for this episode.
    }

    return $next;
}, 10, 3 );

Restart numbering each season

add_filter( 'benecaster_episode_auto_number', function (
    int $next,
    int $episode_id,
    int $show_id
): int {
    $season = (int) get_post_meta( $episode_id, '_benecaster_season', true );

    if ( ! $season ) {
        return $next; // No season set — use default sequence.
    }

    // Count published full episodes already in this season.
    global $wpdb;
    $count = (int) $wpdb->get_var( $wpdb->prepare(
        "SELECT COUNT(*) FROM {$wpdb->postmeta} pm
         JOIN {$wpdb->postmeta} pm2 ON pm2.post_id = pm.post_id
         WHERE pm.meta_key = '_benecaster_season' AND pm.meta_value = %d
           AND pm2.meta_key = '_benecaster_episode_number'
           AND pm.post_id IN (
               SELECT ID FROM {$wpdb->posts}
               WHERE post_parent = %d AND post_status = 'publish'
           )",
        $season, $show_id
    ) );

    return $count + 1;
}, 10, 3 );

Notes

Auto-numbering only runs when no episode number has been set. Setting a number manually in the episode editor before first publish prevents this filter from firing. Return 0 to leave the episode unnumbered.