export to csv wordpress export to csv wordpress wordpress wordpress

export to csv wordpress


This is working perfectly now. we can use this as a plugin. I modified this post. thanks to sruthi sri.

Hope this helps some one :)

<?phpclass CSVExport{/*** Constructor*/public function __construct(){if(isset($_GET['download_report'])){$csv = $this->generate_csv();header("Pragma: public");header("Expires: 0");header("Cache-Control: must-revalidate, post-check=0, pre-check=0");header("Cache-Control: private", false);header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=\"report.csv\";" );header("Content-Transfer-Encoding: binary");echo $csv;exit;}// Add extra menu items for adminsadd_action('admin_menu', array($this, 'admin_menu'));// Create end-pointsadd_filter('query_vars', array($this, 'query_vars'));add_action('parse_request', array($this, 'parse_request'));}/*** Add extra menu items for admins*/public function admin_menu(){add_menu_page('Download Report', 'Download Report', 'manage_options', 'download_report', array($this, 'download_report'));}/*** Allow for custom query variables*/public function query_vars($query_vars){$query_vars[] = 'download_report';return $query_vars;}/*** Parse the request*/public function parse_request(&$wp){if(array_key_exists('download_report', $wp->query_vars)){$this->download_report();exit;}}/*** Download report*/public function download_report(){echo '<div class="wrap">';echo '<div id="icon-tools" class="icon32"></div>';echo '<h2>Download Report</h2>';//$url = site_url();echo '<p>Export the Subscribers';}/*** Converting data to CSV*/public function generate_csv(){$csv_output = '';$table = 'users';$result = mysql_query("SHOW COLUMNS FROM ".$table."");$i = 0;if (mysql_num_rows($result) > 0) {while ($row = mysql_fetch_assoc($result)) {$csv_output = $csv_output . $row['Field'].",";$i++;}}$csv_output .= "\n";$values = mysql_query("SELECT * FROM ".$table."");while ($rowr = mysql_fetch_row($values)) {for ($j=0;$j<$i;$j++) {$csv_output .= $rowr[$j].",";}$csv_output .= "\n";}return $csv_output;}}// Instantiate a singleton of this plugin$csvExport = new CSVExport();


I'm a late bloomer, but made a small 'improvement' to the code you guys worked on and would like to share. If code pasted in the main plugin .php file you don't need to go through the 3 steps. Just change the values at the bottom of the script as required. I like to keep it neat though with plenty of comments for you guys.

For beginners who might need this and to add flexibility for everyone to use:

  1. First add global variable define('MY_PLUGIN_DIR',plugin_dir_path(__FILE__));
  2. After that add require_once(PARTS_MY_PLUGIN_DIR . '/databasestuff/table_to_csv.php')
  3. Under your_plugin_directory/databasestuff/table_to_csv.php save the following class and change the last few lines as required.
  4. Make adjustments to the last few lines

    class export_table_to_csv{  private $db;  private $table_name;  private $separator;  function __construct($table_n, $sep, $filename){    global $wpdb;                                               //We gonna work with database aren't we?    $this->db = $wpdb;                                          //Can't use global on it's own within a class so lets assign it to local object.    $this->table_name = $table_n;                                   $this->separator = $sep;    $generatedDate = date('d-m-Y His');                         //Date will be part of file name. I dont like to see ...(23).csv downloaded    $csvFile = $this->generate_csv();                           //Getting the text generated to download    header("Pragma: public");    header("Expires: 0");    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");    header("Cache-Control: private", false);                    //Forces the browser to download    header("Content-Type: application/octet-stream");    header("Content-Disposition: attachment; filename=\"" . $filename . " " . $generatedDate . ".csv\";" );    header("Content-Transfer-Encoding: binary");    echo $csvFile;                                              //Whatever is echoed here will be in the csv file    exit;  }  function generate_csv(){    $csv_output = '';                                           //Assigning the variable to store all future CSV file's data    $table = $this->db->prefix . $this->table_name;             //For flexibility of the plugin and convenience, lets get the prefix    $result = $this->db->get_results("SHOW COLUMNS FROM " . $table . "");   //Displays all COLUMN NAMES under 'Field' column in records returned    if (count($result) > 0) {        foreach($result as $row) {            $csv_output = $csv_output . $row->Field . $this->separator;        }        $csv_output = substr($csv_output, 0, -1);               //Removing the last separator, because thats how CSVs work    }    $csv_output .= "\n";    $values = $this->db->get_results("SELECT * FROM " . $table . "");       //This here    foreach ($values as $rowr) {        $fields = array_values((array) $rowr);                  //Getting rid of the keys and using numeric array to get values        $csv_output .= implode($this->separator, $fields);      //Generating string with field separator        $csv_output .= "\n";    //Yeah...    }    return $csv_output; //Back to constructor  }}// Also include nonce check here - https://codex.wordpress.org/WordPress_Noncesif(isset($_POST['processed_values']) && $_POST['processed_values'] == 'download_csv'){  //When we must do this  $exportCSV = new export_table_to_csv('table_name',';','report');              //Make your changes on these lines}

Keep in mind:

  1. Table prefix will be added to the table name.
  2. This script uses core WordPress functions meaning that the last 3 lines is literally all you have to change for this to work.


Just making some small adjustments to @Developer since it wasn't quite pulling up in the admin, or downloading the csv. But now it will :) :

<?php/** * CSV Exporter bootstrap file * * This file is read by WordPress to generate the plugin information in the plugin * admin area. This file also includes all of the dependencies used by the plugin, * registers the activation and deactivation functions, and defines a function * that starts the plugin. * * @since             1.0.0 * @package           CSV Export * * @wordpress-plugin * Plugin Name:       CSV Export * Plugin URI:        http://example.com/plugin-name-uri/ * Description:       exports csvs derrr * Version:           1.0.0 * Author:            Your Name or Your Company * Author URI:        http://example.com/ * License:           GPL-2.0+ * License URI:       http://www.gnu.org/licenses/gpl-2.0.txt * Text Domain:       csv-export * Domain Path:       /languages */class CSVExport {  /**   * Constructor   */  public function __construct() {    if (isset($_GET['report'])) {      $csv = $this->generate_csv();      header("Pragma: public");      header("Expires: 0");      header("Cache-Control: must-revalidate, post-check=0, pre-check=0");      header("Cache-Control: private", false);      header("Content-Type: application/octet-stream");      header("Content-Disposition: attachment; filename=\"report.csv\";");      header("Content-Transfer-Encoding: binary");      echo $csv;      exit;    }// Add extra menu items for admins    add_action('admin_menu', array($this, 'admin_menu'));// Create end-points    add_filter('query_vars', array($this, 'query_vars'));    add_action('parse_request', array($this, 'parse_request'));  }  /**   * Add extra menu items for admins   */  public function admin_menu() {    add_menu_page('Download Report', 'Download Report', 'manage_options', 'download_report', array($this, 'download_report'));  }  /**   * Allow for custom query variables   */  public function query_vars($query_vars) {    $query_vars[] = 'download_report';    return $query_vars;  }  /**   * Parse the request   */  public function parse_request(&$wp) {    if (array_key_exists('download_report', $wp->query_vars)) {      $this->download_report();      exit;    }  }  /**   * Download report   */  public function download_report() {    echo '<div class="wrap">';    echo '<div id="icon-tools" class="icon32"></div>';    echo '<h2>Download Report</h2>';    echo '<p><a href="?page=download_report&report=users">Export the Subscribers</a></p>';  }  /**   * Converting data to CSV   */  public function generate_csv() {    $csv_output = '';    $table = 'wp_users';    $result = mysql_query("SHOW COLUMNS FROM " . $table . "");    $i = 0;    if (mysql_num_rows($result) > 0) {      while ($row = mysql_fetch_assoc($result)) {        $csv_output = $csv_output . $row['Field'] . ",";        $i++;      }    }    $csv_output .= "\n";    $values = mysql_query("SELECT * FROM " . $table . "");    while ($rowr = mysql_fetch_row($values)) {      for ($j = 0; $j < $i; $j++) {        $csv_output .= $rowr[$j] . ",";      }      $csv_output .= "\n";    }    return $csv_output;  }}// Instantiate a singleton of this plugin$csvExport = new CSVExport();

Just create a file called csv_export.php put it in a plugins/csv_export/ and you're gtg!