Pour ajouter, dans le back-office de WordPress, un lien qui permet d’exporter des données du site au format CSV, ajoutez ce code dans votre fichier functions.php :
<?php
add_action( 'wp_loaded', 'cs_export', 0 );
/**
* Génère et affiche le lien d'exportation des données
*/
function cs_export_url() {
$args = array(
'cs_action' => 'export',
'page' => 'la page en cours', // facultatif (selon votre cas)
);
$url_export = add_query_arg( $args, admin_url() );
echo "<p><a href='" . $url_export . "'>Télécharger au format CSV</a></p>";
}
/**
* Exporte au format CSV
*/
function cs_export() {
/**
* Droits d'accès (à moduler selon votre cas)
*/
if ( ! current_user_can( 'administrator' ) && ! current_user_can( 'editor' ) && ! current_user_can( 'shop_manager' ) ) {
return;
}
if ( ! isset( $_GET['cs_action'] ) || 'export' != $_GET['cs_action'] ) {
return;
}
/**
* Prépare le fichier CSV
*/
$file_name = sanitize_file_name( 'export-' . date( 'Y-m-d-h-i' ) . '.csv' );
header( "Content-Type: text/csv" );
header( "Content-Disposition: attachment; filename=$file_name" );
header( "Cache-Control: no-cache, no-store, must-revalidate" );
header( "Pragma: no-cache" );
header( "Expires: 0" );
/**
* Retourne les données à exporter
*/
global $wpdb;
$header_csv = array( "Email", "Nom", "Prénom", "Société" ); // La première ligne du fichier, à adapter selon les cas
$table = $wpdb->prefix . 'votre-table';
$datas = $wpdb->get_results( "SELECT email, nom, prenom, societe FROM $table", ARRAY_A ); // Requète à adapter à vos besoin
/**
* Crée le fichier CSV
*/
$output = fopen( "php://output", "w" );
fputcsv( $output, $header_csv, ',' );
foreach ( $datas as $data ) {
fputcsv( $output, $data, ',' );
}
fclose( $output );
exit;
}
Pour ajouter le lien qui permet de lancer l’exportation, il suffit d’ajouter la fonction cs_export_url() à l’endroit où vous souhaitez que le lien apparaisse.
cs_export_url(); // Lien d'export
Si cet article vous a aidé, si vous avez des questions ou des améliorations à proposer, n'hésitez pas à me laisser un commentaire en bas de page !