Xuất dữ liệu dưới dạng CSV ở mặt sau với các tiêu đề HTTP thích hợp


7

Tôi đã viết một plugin hiển thị tất cả các sản phẩm trong cửa hàng thương mại điện tử trong tùy chọn cài đặt quản trị viên, bây giờ tôi muốn thêm một liên kết để tải xuống các sản phẩm dưới dạng tệp CSV.

Vấn đề là, khi tôi nhấp vào liên kết, tôi gặp lỗi về quyền cho biết tôi không có quyền xem trang này.

Đây là mã của tôi:

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>';
    }
}

Làm thế nào tôi có thể sửa các quyền đó?

Câu trả lời:


24

Không trỏ URL tới admin.php, sử dụng admin-post.phpthay thế:

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

Trong plugin của bạn đăng ký một cuộc gọi lại cho hành động đó:

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
}

Nếu bạn muốn cung cấp dữ liệu cho người dùng ẩn danh (chưa đăng nhập), thì hãy đăng ký lại cuộc gọi lại với:

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

Máy và loại bỏ kiểm tra khả năng từ chức năng.


Chỉ muốn thêm để tham khảo trong tương lai rằng việc thêm các tham số bổ sung vào URL có thể được truy cập trong hàm gọi lại bằng cách phân tích biến $ _REQUEST.
eballeste

1
@eballeste Phân tích cú pháp $_GET, không $_REQUEST. Luôn luôn chỉ sử dụng dữ liệu từ những nơi dự kiến. $_REQUESTbao gồm dữ liệu POST và COOKIE.
fuxia

Chỉ cần thêm cho rõ ràng rằng mặc dù đúng là việc phân tích biến $ _GET để phân tích các tham số URL tốt hơn là sử dụng biến $ _REQUEST, vì mục đích bảo mật, bạn cũng nên sử dụng nonces. Đây là một liên kết hữu ích: tipsandtricks-hq.com/int sinhtion
to
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.