Tôi đã tạo plugin cho khách hàng để họ có thể tải xuống dữ liệu dưới dạng tệp CSV. Nó được thiết lập để khi người dùng nhấp vào một liên kết trong menu, CSV sẽ chỉ tự động tải xuống. Tuy nhiên, nó không hoàn toàn hoạt động như thế và chỉ tải chức năng như một trang trong phần phụ trợ WordPress.Cách tải xuống tệp CSV từ chức năng trong plugin WordPress?
Đây là mã tôi đã cho các chức năng:
function download_payment_csv() {
include 'lib/connection.php';
$csv_output = '';
$values = $db->query('SELECT * FROM tbPayments ORDER BY date DESC');
$i=0;
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j].",";
}
$csv_output .= "\n";
}
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_output;
}
Và như tôi đã nói, nó chỉ trả về một màn hình trống. Bất kỳ trợ giúp sẽ được đánh giá cao!
EDIT Vì vậy, đây là mã tôi hiện đang làm việc, lấy bit từ những gì đã được nói.
function download_payment_csv() {
include 'lib/connection.php';
$csv_output = '';
$values = load_payment_csv();
$fp = fopen("php://output", "w");
$file = 'test_export';
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=".$filename.".csv");
// Disable caching
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1
header("Pragma: no-cache"); // HTTP 1.0
header("Expires: 0"); // Proxies
header("Content-Transfer-Encoding: UTF-8");
if(count($values) > 0) {
foreach($values as $result) {
fputcsv($fp, $result);
}
}
fclose($fp);
}
Điều này tạo ra CSV, nhưng có vấn đề với vấn đề này. Khi xem trang không tải xuống dưới dạng CSV, nó chỉ xuất nội dung của CSV vào trang . Tuy nhiên, thêm chức năng này vào đầu plugin:
add_action('admin_init','download_payment_csv');
Điều này sau đó kích hoạt tải xuống khi liên kết menu được nhấp vào. Nhưng nó kích hoạt nó cho mọi mục menu trong plugin, điều đó là sai. Nó chỉ nên kích hoạt khi liên kết tải xuống được nhấp.
nếu bạn chỉ vang '$ csv_output'; bạn có nhận được kết quả nào không? –
Khi nó tải chỉ là chức năng, nó có chứa bất kỳ đầu ra nào không?Ngoài ra ** không sử dụng mysql_, sử dụng PDO hoặc mysqli _ ** – Justinas
Tôi nhận được hoàn toàn không có đầu ra khi chỉ echo'ing $ csv_output khi nó được tải như chỉ là chức năng – mickburkejnr