php – 如何从WordPress插件中的功能下载CSV文件?

前端之家收集整理的这篇文章主要介绍了php – 如何从WordPress插件中的功能下载CSV文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我为客户端构建了一个插件,以便他们以CSV文件的形式下载数据.它已经设置好,当用户点击菜单中的链接时,CSV应该只是自动下载.但是,它不会像这样工作,只需将功能作为页面加载到wordpress后端.

这是我的功能代码

  1. function download_payment_csv() {
  2. include 'lib/connection.PHP';
  3.  
  4. $csv_output = '';
  5.  
  6. $values = $db->query('SELECT * FROM tbPayments ORDER BY date DESC');
  7.  
  8. $i=0;
  9.  
  10. while ($rowr = MysqL_fetch_row($values)) {
  11. for ($j=0;$j<$i;$j++) {
  12. $csv_output .= $rowr[$j].",";
  13. }
  14. $csv_output .= "\n";
  15. }
  16.  
  17. header("Pragma: public");
  18. header("Expires: 0");
  19. header("Cache-Control: must-revalidate,post-check=0,pre-check=0");
  20. header("Cache-Control: private",false);
  21. header("Content-Type: application/octet-stream");
  22. header("Content-Disposition: attachment; filename=\"report.csv\";" );
  23. header("Content-Transfer-Encoding: binary");
  24.  
  25. echo $csv_output;
  26.  
  27. }

正如我所说,它只是返回一个空白屏幕.任何帮助将不胜感激!

编辑
所以这是我现在正在使用的代码,从已经说过的代码中抽出来.

  1. function download_payment_csv() {
  2.  
  3. include 'lib/connection.PHP';
  4.  
  5. $csv_output = '';
  6.  
  7. $values = load_payment_csv();
  8.  
  9. $fp = fopen("PHP://output","w");
  10.  
  11. $file = 'test_export';
  12. $filename = $file."_".date("Y-m-d_H-i",time());
  13. header("Content-Type: text/csv");
  14. header("Content-Disposition: attachment; filename=".$filename.".csv");
  15. // Disable caching
  16. header("Cache-Control: no-cache,no-store,must-revalidate"); // HTTP 1.1
  17. header("Pragma: no-cache"); // HTTP 1.0
  18. header("Expires: 0"); // Proxies
  19. header("Content-Transfer-Encoding: UTF-8");
  20.  
  21. if(count($values) > 0) {
  22. foreach($values as $result) {
  23. fputcsv($fp,$result);
  24. }
  25. }
  26.  
  27. fclose($fp);
  28.  
  29. }

这会产生一个CSV,但是它有一个问题.问题是,当查看页面时,它不会将其下载为CSV,它只将CSV的内容输出页面.但是,将此函数添加插件的顶部:

  1. add_action('admin_init','download_payment_csv');

这样当菜单链接被点击时触发下载,这是很好的.但它会为插件中的每个菜单项触发它,这是错误的.仅当点击下载链接时才触发.

/ **
*查询顶部行
* /
  1. $results = $wpdb->get_results("SHOW COLUMNS FROM $table" );
  2. if(count($results) > 0){
  3. foreach($results as $result){
  4. $csv_output .= str_replace('_',' ',$result->Field).","; //,or ;
  5. }
  6. }
  7. $csv_output .= "\n";

/ **
*查询所有必需的数据
* /

  1. $results = $wpdb->get_results("SELECT * FROM $table",ARRAY_A );
  2. if(count($results) > 0){
  3. foreach($results as $result){
  4. $result = array_values($result);
  5. $result = implode(",",$result);
  6. $csv_output .= $result."\n";
  7. }
  8. }

/ **
*准备文件名和CSV文件导出
* /

  1. $filename = $file."_".date("Y-m-d_H-i",time());
  2. header("Content-type: application/vnd.ms-excel");
  3. header("Content-disposition: csv" . date("Y-m-d") . ".csv");
  4. header( "Content-disposition: filename=".$filename.".csv");
  5. print $csv_output;
  6. exit;

把这全部放在一个功能中应该做的伎俩

猜你在找的PHP相关文章