Ich habe ein Plugin geschrieben, das alle Produkte in einem Woocommerce-Shop in den Admin-Einstellungen anzeigt. Jetzt möchte ich einen Link hinzufügen, um die Produkte als CSV-Datei herunterzuladen.
Das Problem ist, wenn ich auf den Link klicke, wird ein Berechtigungsfehler angezeigt, der besagt, dass ich keine Berechtigung zum Anzeigen dieser Seite habe.
Hier ist mein Code:
function extra_tablenav($which) {
if ($which == "top") {
echo '<h3 style="display:inline">'
. __('These products are currently in the database:')
. '</h3>' .
' ' .
'<a href="' . admin_url('admin.php?page=download_csv.php') . '">' . __('Export to CSV') . '</a>';
}
}
Wie kann ich diese Berechtigungen korrigieren?
Verweisen Sie die URL nicht auf admin.php
, sondern verwenden Sie stattdessen admin-post.php
:
'<a href="' . admin_url( 'admin-post.php?action=print.csv' ) . '">'
In Ihrem Plugin registrieren Sie einen Rückruf für diese Aktion:
add_action( 'admin_post_print.csv', 'print_csv' );
function print_csv()
{
if ( ! current_user_can( 'manage_options' ) )
return;
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=example.csv');
header('Pragma: no-cache');
// output the CSV data
}
Wenn Sie die Daten für anonyme Benutzer verfügbar machen möchten (nicht angemeldet), registrieren Sie den Rückruf erneut mit:
add_action( 'admin_post_nopriv_print.csv', 'print_csv' );
… Und entfernen Sie die Fähigkeitsprüfung aus der Funktion.