2014-10-22 2 views
3

내 WordPress 플러그인에 대한 보고서를 작성하려고합니다. 이 보고서는 Excel로 다운로드 할 수 있어야합니다. 기본적으로 나는 버튼을 생성 한 않았고 그 버튼을 누를 때, 나는 데이터베이스를 조회하고 결과에서 엑셀을 무슨.Wordpress 플러그인을 올바르게 작성하는 방법 다운로드 가능한 Excel 파일이 반환됩니다.

는 지금은 엑셀 파일로 결과를 반환하는 헤더를 수정해야합니다.

header('Content-Disposition: attachment; filename='.$filename.'.xls'); 
header('Content-type: application/force-download'); 
header('Content-Transfer-Encoding: binary'); 
header('Pragma: public'); 
print "\xEF\xBB\xBF"; // UTF-8 BOM 

문제는 다음과 같은 오류 반환 :

Warning: Cannot modify header information - headers already sent by (output started at .....\wp-admin\menu-header.php:137) 

내가 아마 (위한 ob_start 필요)이를 들어,하지만위한 ob_start하지 않습니다()에 있어야합니다 이것은 내가 그것을 어떻게입니다 맨 처음 머리말 (Wordpress의 핵심 파일에서 온 것입니다). 가능한 경우 코어 파일을 수정하지 않는 것이 좋습니다.

아니면 워드 프레스 '자신의 후크'send_headers '? 하지만 작동시키지 못하면 여전히 같은 오류가 발생합니다.

그래서 나는이 문제를 해결하기 위해 무엇을해야합니까? WordPress의 플러그인에서 Excel 파일을 grenerate하는 다른 방법이 있습니까?

도움을 주셨습니다.

답변

3

header()가 이미 menu-header.php에서 전송 된 이후에 너무 늦게 헤더를 보냈습니다. 제공된 코드에서 헤더를 보내는 지점을 볼 수는 없지만 모든 플러그 인이로드되고 출력이 전송되기 전에 액션 훅이 호출되기 때문에 좋은 위치는 plugins_loaded 동작에 있습니다.

다운로드 링크는 다음과 같이 할 수 있습니다

add_action('plugins_loaded', function() { 
    if (isset($_GET['download'])) { 
     // here you can create .xls file 

     header('Content-Disposition: attachment; filename='.$filename.'.xls'); 
     header('Content-type: application/force-download'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Pragma: public'); 
     die();  
    } 
}); 
:

<a href="<?php echo admin_url('?download'); ?>">download</a> 

그리고이 조치를 plugins_loaded

관련 문제