Skip to content
Learnomy

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.

What you can do

  • 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

How to use it

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)

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.

Step 3 -- export

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.

Step 4 -- open it

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.

Settings and options

  • 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.

For developers

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/export -- Admin_Controller::export_transactions_csv() (cursor-iterates Transaction::iterate_all()).
  • GET /admin/students/export -- Admin_Controller::export_students_csv() (streams the enrolled-user list).
  • GET /admin/memberships/export -- Membership_Controller::export_subscriptions_csv() (honors status + plan_id).
  • GET /admin/membership-plans/export -- Membership_Controller::export_plans_csv().
  • GET /questions/export -- Questions_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().

Related