Экспорт данных в CSV в бэкэнд с правильными заголовками HTTP

Я написал плагин, который отображает все продукты в магазине 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>';
    }
}

Как я могу исправить эти разрешения?

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 1
  1. 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');
    
        // вывод CSV-данных
    }
    

    Если вы хотите сделать данные доступными для анонимных пользователей (которые не вошли в систему), зарегистрируйте обратный вызов еще раз с помощью:

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

    … и удалите проверку прав из функции.

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: