2014-03-07 4 views
1

내 설정에는 버튼을 한 번 클릭하면 CSV 파일을 다운로드하라는 메시지가 표시됩니다. 여기에 코드가 있습니다.Wordpress에서 CSV 파일 내보내기

<?php 

/** Step 2 (from text above). */ 
add_action('admin_menu', 'my_plugin_menu'); 

/** Step 1. */ 
function my_plugin_menu() { 
    add_options_page('Members Log Data', 
         'Members Log', 
         'manage_options', 
         'sj-member-option', 
         'members_option'); 
} 

/** Step 3. */ 
function members_option() { 
    if (!current_user_can('manage_options')) 
    { 
     wp_die(__('You do not have sufficient permissions to access this page.')); 
    } 
    $name = "member-log-".date('Y-m-d'); 
    $list[] = array('username','no of favorites'); 

    header('Content-Type: text/csv; charset=utf-8'); 
    header('Content-Disposition: attachment; filename=' . $name); 

    $op = fopen('php://output','w'); 
    foreach($list as $row) 
    { 
     fputcsv($op,$row); 
    } 
    fclose($op); 
    /* 
    echo '<div class="wrap">'; 
    echo '<p>Here is where the form would go if I actually had options.</p>'; 
    echo '</div>'; 
    */ 
} 

세션 헤더를 수정할 수 없습니다.

저는 WP에서이 작업을 수행하는 방법에 대해 알고 싶습니다.

답변

0

header 명령을 너무 늦게 보내려고하므로 오류가 발생합니다. 이러한 종류의 출력에는 후크 load-(your_page)을 사용하십시오. members_option 기능 콜백에서

function my_plugin_menu() { 
    $page = add_options_page('Members Log Data', 
         'Members Log', 
         'manage_options', 
         'sj-member-option', 
         'members_option'); 
    add_action("load-$page", 'do_export'); 
} 

은 제출 버튼으로 <form>을 추가하고 새로운 do_export 기능에 당신은 수출 작업을 넣을 수 있습니다. 나는 울부 짖는 소리처럼, 나는 nonce를 검사하지 않는다는 것을 유의하십시오. 그러나 보안에 대한 최상의 방법은 $_POST['submit']을 검사하는 대신에해야합니다. 내 테스트에서

function members_option() { 
    if (!current_user_can('manage_options')) 
    { 
     wp_die(__('You do not have sufficient permissions to access this page.')); 
    } 
    ?> 
     <form method='post' > 
      <p class="submit"> 
       <?php wp_nonce_field('my-import'); ?> 
       <input type='submit' name='submit' value='Restore'/> 
      </p> 
     </form> 
    <?php 
} 

function do_export() { 
    if(isset($_POST['submit']) && 'Restore' == $_POST['submit']) 
    { 
     $name = "member-log-".date('Y-m-d'); 
     $list[] = array('username','no of favorites'); 
     header('Content-Type: text/csv; charset=utf-8'); 
     header('Content-Disposition: attachment; filename=' . $name); 

     $op = fopen('php://output','w'); 
     foreach($list as $row) 
     { 
      fputcsv($op,$row); 
     } 
     fclose($op); 
    } 
} 

는 내보내기 결과 페이지의 전체 내용을 플러스 사용자가 정의한 'username','no of favorites' HTML 파일, 그러나 이것은 또 다른 질문/연구를위한 문제이다.

관련 문제