web-dev-qa-db-ja.com

適切なHTTPヘッダーを持つバックエンドでデータをCSVとしてエクスポートする

私は、管理設定オプションでwoocommerceストアのすべての商品を表示するプラグインを書きました。今、商品をCSVファイルとしてダウンロードするためのリンクを追加します。

問題は、リンクをクリックすると、このページを表示する権限がないという権限エラーが表示されることです。

これが私のコードです:

function extra_tablenav($which) {
    if ($which == "top") {
        echo '<h3 style="display:inline">'
        . __('These products are currently in the database:')
        . '</h3>' .
        '&nbsp;&nbsp;&nbsp;' .
        '<a href="' . admin_url('admin.php?page=download_csv.php') . '">' . __('Export to CSV') . '</a>';
    }
}

これらの許可をどのように修正できますか?

7
Yekhezkel Yovel

URLをadmin.phpに向けないで、代わりにadmin-post.phpを使用してください。

'<a href="' . admin_url( 'admin-post.php?action=print.csv' ) . '">'

プラグインにそのアクションのコールバックを登録します。

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
}

データを匿名ユーザー(ログインしていないユーザー)が利用できるようにしたい場合は、コールバックを再度登録します。

add_action( 'admin_post_nopriv_print.csv', 'print_csv' );

…そして機能から能力チェックを取り除きます。

23
fuxia