Skip to main content

benecaster_export_sheet_rows_{sheet_id}

Filter Free Since v1.0.0

Pattern filter that provides or filters the row data for one specific sheet in the “Your Data” XLSX export. The filter name is dynamic — `{sheet_id}` is replaced with the sheet’s `id` value as registered via [benecaster_export_sheets](/hooks/benecaster_export_sheets/). For example: `benecaster_export_sheet_rows_subscribers`, `benecaster_export_sheet_rows_sponsor_placements`.

Fires only during XLSX file generation (POST `/export`) — not during the UI render pass. Core sheets (`subscribers`, `subscription_events`, `shows`, `episodes`) arrive pre-populated with rows; add-on-registered sheets arrive as an empty array that the add-on must populate. Each inner array must contain cell values in the same order as the sheet’s `columns` map.

Parameters

Name Type Default Description
$rows array Array of row arrays; each inner array is ordered cell values matching the sheet's columns
$context array Export context: {show_id: int|null, date_start: string, date_end: string}

Returns: array

Examples

Provide rows for custom donations sheet

// Provide rows for the custom "donations" sheet registered in benecaster_export_sheets.
add_filter( 'benecaster_export_sheet_rows_donations', function( $rows, $context ) {
    $donations = my_addon_get_donations( $context['show_id'], $context['date_start'], $context['date_end'] );
    foreach ( $donations as $d ) {
        $rows[] = [ $d->date, $d->email, $d->amount, $d->currency ];
    }
    return $rows;
}, 10, 2 );

Populate sponsor placements with a database query

add_filter( 'benecaster_export_sheet_rows_sponsor_placements', function ( array $rows, array $context ): array {
    if ( ! benecaster_addon_is_active( 'sponsor-manager' ) ) {
        return $rows;
    }
    global $wpdb;
    $results = $wpdb->get_results( $wpdb->prepare(
        "SELECT episode_id, sponsor_name, placement, clicks
         FROM {$wpdb->prefix}my_sponsor_placements
         WHERE placed_date BETWEEN %s AND %s",
        $context['date_start'],
        $context['date_end']
    ), ARRAY_A );

    foreach ( $results as $row ) {
        $rows[] = [ $row['episode_id'], $row['sponsor_name'], $row['placement'], (int) $row['clicks'] ];
    }
    return $rows;
}, 10, 2 );

Notes

Cell values must be in the same order as the sheet's columns map. A mismatch between the number of values per row and the column count produces misaligned cells in the XLSX file. The sheet must first be registered via benecaster_export_sheets for this filter to have any effect. Apply $context['date_start'] and $context['date_end'] (ISO 8601 strings) to time-series data; export content data such as subscribers, shows, and episodes regardless of date range.