Cum să exportați date în format CSV în backend cu antete HTTP corecte | WordPress Developer

10 iun. 2013, 02:25:01
Vizualizări: 15.2K
Voturi: 8

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>' .
        '&nbsp;&nbsp;&nbsp;' .
        '<a href="' . admin_url('admin.php?page=download_csv.php') . '">' . __('Exportă în CSV') . '</a>';
    }
}

Cum pot rezolva aceste probleme de permisiuni?

0
Toate răspunsurile la întrebare 1
3
26

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.

10 iun. 2013 02:32:12
Comentarii

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 eballeste
29 iun. 2017 10:09:49

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

fuxia fuxia
29 iun. 2017 10:11:54

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

eballeste eballeste
29 iun. 2017 10:28:48