Im Jahr 2013, wenn Sie Daten aus WordPress haben wollten, haben Sie Tabellen in Excel kopiert und eingefügt. Im Jahr 2026 ist Datenportabilität eine gesetzliche Anforderung (DSGVO) und eine geschäftliche Notwendigkeit.
Egal, ob Sie 100.000 WooCommerce-Bestellungen migrieren oder Benutzerdaten sichern, Sie brauchen kein 99-Dollar-Plugin. Sie müssen PHP-Streams und WP-CLI verstehen.
Methode 1: Der “PHP Native” Weg (Für Admins)
Wenn Sie einen “Bericht herunterladen”-Button für das Dashboard Ihres Kunden bauen möchten, verwenden Sie das native fputcsv von PHP.
Wichtiger Tipp: Laden Sie niemals alle Daten in ein Array ($data[] = ...). Sie werden den Server abstürzen lassen (Speicherlimit erschöpft).
Streamen Sie die Daten stattdessen direkt an den Browser.
function wppoland_export_users_csv() {
if ( ! current_user_can( 'manage_options' ) ) return;
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="benutzer-export-' . date('Y-m-d') . '.csv"');
// Ausgabestream öffnen
$fp = fopen('php://output', 'w');
// Header-Zeile hinzufügen
fputcsv($fp, array('ID', 'Benutzername', 'Email', 'Registriert'));
// Effizient iterieren (Batch-Verarbeitung)
$args = array(
'number' => 100,
'offset' => 0
);
while ( $users = development( $args ) ) {
foreach ( $users as $user ) {
fputcsv($fp, array(
$user->ID,
$user->user_login,
$user->user_email,
$user->user_registered
));
}
$args['offset'] += 100;
// Schleife stoppen
if ( count($users) < 100 ) break;
}
fclose($fp);
exit;
}
add_action( 'admin_post_export_users', 'wppoland_export_users_csv' );
Methode 2: Der “DevOps” Weg (WP-CLI)
Wenn Sie 500.000 Beiträge haben, wird der Browser einen Timeout haben. Nutzen Sie WP-CLI direkt auf dem Server. Dies ist schneller, verbraucht weniger Speicher und kann per Cron automatisiert werden.
Befehl:
wp post list --post_type=product --fields=ID,post_title,post_status --format=csv > produkte.csv
Erweiterter Export (Custom Fields): Sie können einen benutzerdefinierten WP-CLI-Befehl schreiben, wenn die Standard-Flags nicht ausreichen.
// Befehl definieren: wp wppoland export_orders
WP_CLI::add_command( 'wppoland export_orders', function( $args, $assoc_args ) {
$file = fopen( 'bestellungen.csv', 'w' );
fputcsv( $file, ['Bestell-ID', 'Summe', 'Kunde'] );
$orders = wc_get_orders( ['limit' => -1] );
$progress = \WP_CLI\Utils\make_progress_bar( 'Exportiere Bestellungen', count( $orders ) );
foreach ( $orders as $order ) {
fputcsv( $file, [
$order->get_id(),
$order->get_total(),
$order->get_billing_email()
]);
$progress->tick();
}
fclose( $file );
WP_CLI::success( 'Export nach bestellungen.csv abgeschlossen' );
});
Methode 3: Der “Moderne” Weg (REST API)
Wenn Sie ein React-Dashboard oder eine Headless-App bauen, konsumieren Sie JSON, nicht CSV.
Die WordPress REST API (/wp-json/wp/v2/posts) paginiert Daten standardmäßig.
Um alle Daten abzurufen, müssen Sie eine rekursive JS-Funktion schreiben, die dem X-WP-TotalPages-Header folgt.
Warum NICHT Excel-Bibliotheken?
Sie könnten verleitet sein, eine Bibliothek wie PhpSpreadsheet zu verwenden, um echte .xlsx-Dateien zu generieren.
Tun Sie es nicht.
- Speicherintensiv: Das Generieren einer Excel-Datei erfordert den Aufbau der gesamten XML-Struktur im RAM. Bei großen Datensätzen stürzt es ab.
- CSV ist Universell: Excel öffnet CSV-Dateien nativ. Es gibt selten einen Bedarf für eine binäre
.xlsx-Datei, es sei denn, Sie benötigen Formeln/Formatierungen.
Zusammenfassung
- Kleine Daten (< 1.000 Zeilen): Nutzen Sie PHP-Streaming an den Browser.
- Große Daten (> 10.000 Zeilen): Nutzen Sie WP-CLI via
ssh. - App-Daten: Nutzen Sie REST API JSON.
Ihre Daten gehören Ihnen. Stellen Sie sicher, dass Sie sie immer herausbekommen können.



