Created
August 29, 2018 01:04
-
-
Save hugodias/975b167972f9bfb19d3fd17346596106 to your computer and use it in GitHub Desktop.
Export wordpress table data in CSV format
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Class CSV | |
* | |
* Export any wordpress table in CSV format | |
* | |
* @author Hugo Dias <[email protected]> | |
* @since 2.0.0 | |
* @example $csv = new CSV('posts'); // Will export wp-posts table | |
* | |
*/ | |
class CSV | |
{ | |
/** | |
* @var wpdb | |
*/ | |
private $db; | |
/** | |
* @var | |
*/ | |
private $separator; | |
/** | |
* @var string | |
*/ | |
private $table; | |
/** | |
* CSV constructor. | |
* | |
* @param null $table_name Table name without prefix | |
* @param string $sep CSV separator | |
* @param string $filename Name of the csv file | |
* | |
* @throws Exception | |
*/ | |
public function __construct( | |
$table_name = null, | |
$sep = ";", | |
$filename = "data" | |
) { | |
if ( ! isset($table_name)) { | |
throw new Exception("Table name argument is required"); | |
} | |
global $wpdb; | |
$this->db = $wpdb; | |
$this->separator = $sep; | |
$this->table = $this->db->prefix . $table_name; | |
$generatedDate = date('d-m-Y His'); | |
$csvFile = $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=\"" . $filename . " " | |
. $generatedDate . ".csv\";"); | |
header("Content-Transfer-Encoding: binary"); | |
echo $csvFile; | |
exit; | |
} | |
/** | |
* Fetch results from table and return a string containing all the data | |
* | |
* @return string | |
*/ | |
public function generate_csv() | |
{ | |
$csv_output = ''; | |
$csv_output .= $this->get_columns(); | |
$csv_output .= "\n"; | |
$csv_output .= $this->get_data(); | |
return $csv_output; | |
} | |
/** | |
* Get table columns as a string separated by $this->separator; | |
* | |
* @return string | |
*/ | |
public function get_columns() | |
{ | |
$output = ""; | |
$query = "SHOW COLUMNS FROM `" . $this->table . "`"; | |
$result = $this->db->get_results($query); | |
if (count($result) > 0) { | |
foreach ($result as $row) { | |
$output = $output . $row->Field . $this->separator; | |
} | |
$output = substr($output, 0, -1); | |
} | |
return $output; | |
} | |
/** | |
* Get table data as a string separated by $this->separator | |
* | |
* @return string | |
*/ | |
public function get_data() | |
{ | |
$output = ""; | |
$query = "SELECT * FROM `" . $this->table . "`"; | |
$values = $this->db->get_results($query); | |
foreach ($values as $rowr) { | |
$fields = array_values((array)$rowr); | |
$output .= implode($this->separator, $fields); | |
$output .= "\n"; | |
} | |
return $output; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment