Skip to content

Data Exports (CSV)

Learnomy’s admin list pages can hand you a clean CSV download of what you are looking at – transactions, students, subscriptions, plans, and your question bank – ready to open in a spreadsheet.

  • Export your transactions as a CSV audit and accounting feed.
  • Export the enrolled student list as a CSV.
  • Export subscriptions, filtered to exactly the status and plan you have on screen.
  • Export your membership plans catalog.
  • Export your question bank, filtered the same way the bank list filters it (and re-import a CSV to add questions in bulk).
  • Get a file that opens correctly in Excel or Google Sheets – every row in its own cells, not crammed into one cell.
  • Export from large sites without silent truncation, because exports stream row by row instead of capping the result.

Data Exports (CSV) first view

Step 1 – open the list you want to export

Section titled “Step 1 – open the list you want to export”

Go to the matching admin page: Transactions, Students, Subscriptions, Membership Plans, or the Question Bank.

Step 2 – filter to what you need (where supported)

Section titled “Step 2 – filter to what you need (where supported)”

On the Subscriptions and Question Bank lists, set the filters first (subscription status and plan; question bank category and type). The export mirrors the filters, so you get “exactly what you see” rather than the whole table.

Use the export action on the page. The file downloads as an attachment with a dated filename (for example learnomy-transactions-YYYY-MM-DD.csv), so repeated exports do not overwrite each other.

Open the file in Excel, Numbers, or Google Sheets. Because the download is served as real text/csv, each value lands in its own cell.

  • What can be exported – transactions, students, subscriptions, membership plans, and the question bank each have their own export. Earnings-side lists (commissions, withdrawals, and instructor applications) also export by requesting the list with format=csv.
  • Filters carry through – subscriptions export honors the status and plan filters; the question-bank export honors the bank’s category and type filters.
  • Dated filenames – every export is named with the date (or date-and-time) so exports are self-labeling and never clobber a previous file.
  • Large lists – the transaction, student, subscription, and plan exports iterate rows with a cursor rather than loading everything into memory, so a site with tens of thousands of rows exports fully instead of being cut off.
  • No spreadsheet corruption – files are streamed as raw text/csv with a download disposition, so the whole file is never JSON-wrapped into a single cell.

The shared streaming mechanism lives in Learnomy\API\Api::stream_csv_responses(), hooked on rest_pre_serve_request. Any REST response whose Content-Type is text/csv and whose body is a string is emitted raw (with its own headers) instead of being JSON-encoded by WP_REST_Server. This fixes every CSV export at once while keeping REST auth and middleware intact.

Helper Learnomy\API\Csv_Formatter builds CSV bodies and downloadable responses: to_string( array $headers, array $rows ) and respond( array $headers, array $rows, string $filename ) (which sets text/csv, a dated Content-Disposition attachment filename, and no-store).

Export endpoints (namespace learnomy/v1, admin-gated):

  • GET /admin/transactions/exportAdmin_Controller::export_transactions_csv() (cursor-iterates Transaction::iterate_all()).
  • GET /admin/students/exportAdmin_Controller::export_students_csv() (streams the enrolled-user list).
  • GET /admin/memberships/exportMembership_Controller::export_subscriptions_csv() (honors status + plan_id).
  • GET /admin/membership-plans/exportMembership_Controller::export_plans_csv().
  • GET /questions/exportQuestions_Controller::export_csv() (honors the bank filters); paired with POST /questions/import (import_csv()) for bulk import.

List endpoints that emit CSV when called with format=csv (via Csv_Formatter::respond()): Admin_Controller::list_commissions(), list_withdrawals(), and list_applications().