Ich habe ein kleines Problem. Auf meiner WordPress-basierten Website möchte ich ein Bestellstatus-Formular erstellen, in dem Benutzer einen Code verwenden und den Fortschritt ihrer Bestellung überprüfen können. Es ist kein Online-Shop, also nutze ich Woocommerce nicht. Die Datei mit dem Fortschritt der Bestellung ist eine CSV-Datei. Ich habe versucht, das über eine Funktion zu verwenden, aber es hat nicht funktioniert. Ich habe sogar Javascript ausprobiert, aber mein Code kann die Datei auf dem Server nicht finden 🙁 Meine Frage ist: Welche Sprache und welche Technik sollte ich für meine Bedürfnisse verwenden.
Vielen Dank, Guyz.
Ich denke, das ist es, wonach Sie suchen, ohne dass Bibliotheken erforderlich sind:
Zuerst erstellen Sie ein Formular (die Formularaktion kann Ihre Homepage sein, da wir auf die $_GET-Parameter warten werden init
die bei jedem Seitenaufbau ausgeführt wird):
<form action="<?php echo site_url() ?>">
<input type="hidden" name="csv_export" value="order_status" />
<input type="text" name="code" />
<input type="submit" value="Download Report" name="download_report" />
</form>
Dann müssen Sie eine Aktion hinzufügen init
in functions.php, um auf den get-Parameter zu hören csv_export
um Ihre Funktionalität zum Vorbereiten der CSV-Datei und zum Ausgeben zum Herunterladen zu starten: (Wir verwenden die Funktion exit(); nachdem wir CSV erstellt haben, um sicherzustellen, dass nach diesem Vorgang nichts anderes ausgeführt wird.)
function check_for_export() {
if ( isset( $_GET['csv_export'], $_GET['code'] ) && $_GET['csv_export'] == 'order_status' ) {
ob_end_clean();
export_order_status_csv( $_GET['code'] );
exit();
}
}
}
add_action('init', 'check_for_export');
Jetzt können Sie die Funktionalität zum Generieren des CSV-Berichts starten. Diese Funktion hängt davon ab, wie Sie die Daten abrufen, aber Sie können diesem Beispiel folgen, um die Kopfzeilen festzulegen und den Bericht auszugeben:
function export_order_status_csv( $code ) {
// Make a DateTime object and get a time stamp for the filename
$date = new DateTime();
$ts = $date->format( "Y-m-d-G-i-s" );
// A name with a time stamp, to avoid duplicate filenames
$filename = "order-statuses-export-$ts.csv";
// Tells the browser to expect a CSV file and bring up the
// save dialog in the browser
header( 'Pragma: public' );
header( 'Expires: 0' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Content-Description: File Transfer' );
header( 'Content-Type: text/csv' );
header( 'Content-Disposition: attachment;filename=" . $filename );
header( "Content-Transfer-Encoding: binary' );
// This opens up the output buffer as a "file"
$fp = fopen( 'php://output', 'w' );
//This needs to be customised from your end, I am doing a WP_Query for this example
$results = new WP_Query();
if ( $results->have_posts() ) {
//This is set to avoid issues with special characters
$bom = ( chr( 0xEF ) . chr( 0xBB ) . chr( 0xBF ) );
//add BOM to fix UTF-8 in Excel
fputs( $fp, $bom );
// Set the headers of the csv
fputcsv( $fp, [
'orderID',
'orderDate',
'orderTotal'
] );
while ( $results->have_posts() ) {
$results->the_post();
//Here we are inserting the row data per result fetched
fputcsv(
$fp,
[
get_the_ID(),
get_the_date(),
'your_custom_data'
]
);
}
wp_reset_query();
// Close the output buffer (Like you would a file)
fclose( $fp );
} else {
fputcsv( $fp, [ 'No Results' ] );
fclose( $fp );
}
}
Wenn Sie eine CSV-Datei exportieren, müssen Sie sich an eine Aktion anschließen, die verarbeitet wird, bevor etwas ausgegeben wurde. Vor dem Erstellen der CSV-Datei kann es keine Ausgabe geben, da wir die Header aktualisieren.
Wenn Sie die Daten aus einer CSV-Datei lesen und bearbeiten möchten, um Ihren CSV-Export anzupassen, können Sie diese Funktion anstelle von WP_Query im obigen Beispiel verwenden: http://php.net/manual/en/function.fgetcsv.php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
Ich habe tatsächlich verwendet PHPExcel in einem früheren Projekt, das das erreicht hat, wonach Sie suchen, obwohl ich sehe, dass es zugunsten von verworfen wurde PhpSpreadsheet-Bibliothek. Also die würde ich verwenden!
Was beide Bibliotheken im Wesentlichen (neben vielen anderen Dingen) tun können, ist, die Tabelle zu analysieren und die relevanten Informationen basierend auf Ihren Anforderungen zurückzugeben.
Sie könnten also Ihre Tabelle in einem separaten Verzeichnis ablegen, aus dem Sie dann die PhpSpreadsheet-Bibliothek verwenden, um Informationen zu extrahieren – und dem Kunden so präsentieren, wie Sie es für richtig halten.
Vielleicht möchten Sie hier einen Teil Ihres Codes hinzufügen, um den Ball ins Rollen zu bringen. Ein erster Tipp: Auschecken codex.wordpress.org/AJAX_in_Plugins
– DB
17. März 2018 um 22:56 Uhr