在后端使用正确的HTTP头将数据导出为CSV

时间:2013-06-09 作者:Yekhezkel Yovel

我写了一个插件,在管理设置选项中显示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>\';
    }
}
如何修复这些权限?

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

不要将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\' );
…并从功能中删除功能检查。

结束