Em 2013, se queria dados fora do WordPress, copiava e colava tabelas no Excel. Em 2026, a Portabilidade de Dados é um requisito legal (RGPD) e uma necessidade de negócios.
Quer esteja a migrar 100.000 encomendas WooCommerce ou a fazer backup de dados de utilizadores, não precisa de um plugin de 99 dólares. Precisa de entender streams PHP e WP-CLI.
Método 1: A maneira “PHP nativa” (para admins)
Se quiser construir um botão “Descarregar Relatório” para o painel do seu cliente, use o fputcsv nativo do PHP.
Dica Crucial: Nunca carregue todos os dados para um array ($data[] = ...). Irá crashar o servidor (Memory Limit Exhausted).
Em vez disso, faça stream dos dados diretamente para o navegador.
function wppoland_export_users_csv() {
if ( ! current_user_can( 'manage_options' ) ) return;
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="exportacao-utilizadores-' . date('Y-m-d') . '.csv"');
// Abrir stream de saída
$fp = fopen('php://output', 'w');
// Adicionar Linha de Cabeçalho
fputcsv($fp, array('ID', 'Nome de Utilizador', 'Email', 'Registado'));
// Iterar eficientemente (Processamento em lotes)
$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;
// Parar Loop
if ( count($users) < 100 ) break;
}
fclose($fp);
exit;
}
add_action( 'admin_post_export_users', 'wppoland_export_users_csv' );
Método 2: A maneira “DevOps” (wp-CLI)
Se tiver 500.000 posts, o navegador vai dar timeout. Use WP-CLI diretamente no servidor. Isto é mais rápido, usa menos memória e pode ser automatizado via Cron.
Comando:
wp post list --post_type=product --fields=ID,post_title,post_status --format=csv > produtos.csv
Exportação Avançada (Campos Personalizados): Pode escrever um comando WP-CLI personalizado se as flags padrão não forem suficientes.
// Definir comando: wp wppoland export_orders
WP_CLI::add_command( 'wppoland export_orders', function( $args, $assoc_args ) {
$file = fopen( 'encomendas.csv', 'w' );
fputcsv( $file, ['ID Encomenda', 'Total', 'Cliente'] );
$orders = wc_get_orders( ['limit' => -1] );
$progress = \WP_CLI\Utils\make_progress_bar( 'Exportar Encomendas', 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( 'Exportacao concluida para encomendas.csv' );
});
Método 3: A maneira “moderna” (REST API)
Se estiver a construir um dashboard React ou uma app Headless, consome JSON, não CSV.
A REST API do WordPress (/wp-json/wp/v2/posts) pagina os dados por defeito.
Para buscar todos os dados, precisa de escrever uma função JS recursiva que siga o cabeçalho X-WP-TotalPages.
Porque não bibliotecas excel?
Pode ser tentado a usar uma biblioteca como PhpSpreadsheet para gerar ficheiros .xlsx reais.
Não o faça.
- Pesado na Memória: Gerar um ficheiro Excel requer construir toda a estrutura XML na RAM. Irá falhar em grandes conjuntos de dados.
- CSV é Universal: O Excel abre ficheiros CSV nativamente. Raramente há necessidade de um ficheiro binário
.xlsxa menos que precise de fórmulas/formatação.
Resumo
- Pequenos Dados (< 1.000 linhas): Use streaming PHP para o navegador.
- Grandes Dados (> 10.000 linhas): Use WP-CLI via
ssh. - Dados de App: Use JSON REST API.
Os seus dados pertencem-lhe. Certifique-se de que consegue sempre tirá-los.



