Cum să exportați date în format CSV în backend cu antete HTTP corecte | WordPress Developer
Am creat un plugin care afișează toate produsele dintr-un magazin WooCommerce în setările de administrare, acum vreau să adaug un link pentru descărcarea produselor ca fișier CSV.
Problema este că atunci când dau click pe link primesc o eroare de permisiune care spune că nu am dreptul să vizualizez această pagină.
Iată codul meu:
function extra_tablenav($which) {
if ($which == "top") {
echo '<h3 style="display:inline">'
. __('Aceste produse sunt momentan în baza de date:')
. '</h3>' .
' ' .
'<a href="' . admin_url('admin.php?page=download_csv.php') . '">' . __('Exportă în CSV') . '</a>';
}
}
Cum pot rezolva aceste probleme de permisiuni?

Nu folosiți URL-ul către admin.php
, utilizați admin-post.php
în schimb:
'<a href="' . admin_url( 'admin-post.php?action=print.csv' ) . '">'
În plugin-ul dvs., înregistrați un callback pentru această acțiune:
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');
// afișează datele CSV
}
Dacă doriți să faceți datele disponibile pentru utilizatorii anonimi (neautentificați), atunci înregistrați din nou callback-ul cu:
add_action( 'admin_post_nopriv_print.csv', 'print_csv' );
... și eliminați verificarea de capabilitate din funcție.

Doar voiam să adaug pentru referință viitoare că parametrii suplimentari adăugați în URL pot fi accesați în funcția de callback prin parsarea variabilei $_REQUEST.

@eballeste Parsare $_GET
, nu $_REQUEST
. Utilizează întotdeauna doar datele din sursele așteptate. $_REQUEST
include date din POST și COOKIE.

Adaug pentru claritate suplimentară că, deși este adevărat că parsarea variabilei $_GET pentru a extrage parametrii din URL este preferabilă față de utilizarea variabilei $_REQUEST, din motive de securitate, ar trebui să utilizați și nonce-uri. Iată un link util: https://www.tipsandtricks-hq.com/introduction-to-wordpress-nonces-5357
