2019.02.09: 이 포스팅은 WP 4를 기준으로 만들어졌던 것으로 WP 5에서는 테스트되지 않았습니다.
마지막 포스팅
Excel 출력을 위한 준비물
phpExcel이라는 Library를 사용한다.
https://phpexcel.codeplex.com/
압축파일을 열어보면 설명이 대강 되어있는데, 간단하게 Classes라는 폴더를 wamp/www (혹은 사용하는 서버의 가장 앞쪽 폴더?) 위치에 두면 된다.
혹시 로딩이 안되면 아래 파일의 경로를 바꾸면 된다.
require_once dirname(__FILE__) . ‘/../Classes/PHPExcel.php’;
WordPress 외부 접근
용어가 적절한지 모르겠다. 다만 이전의 그누보드의 경우에서 보면 common.php 를 이용해서 게시판 외적으로 접근이 가능했는데, 워드프레스도 비슷한 방식으로 가능하다.
require_once( dirname( __FILE__ ) . '/wp-load.php' ); global $user_ID; if (!is_user_logged_in()){ die("You Must Be Logged In to Access This"); } if( ! current_user_can('edit_files')) { die("Sorry you are not authorized to access this file"); }
내가 만든 코드는 로그인을 안하고 이 페이지를 들어오게되면 안되게 해놨다.
그리고 아래 코드들은 그냥 예제로 만들어진 코드를 간단히 수정해본 소스다.
xls 파일 출력
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php'; // Redirect output to a client’s web browser (Excel2007) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="export_data.xlsx"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 // Create new PHPExcel object $objPHPExcel = new PHPExcel(); // Set document properties $objPHPExcel->getProperties()->setCreator("Junn") ->setLastModifiedBy("Junn") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); // Get all posts $patients = $wpdb->get_results('SELECT * FROM '. $wpdb->prefix.'posts' .' WHERE `post_type` = \'patients\''); if($patients) { $i =0; foreach ($patients as $patient) { $i++; $pts_id_row = $wpdb->get_row('SELECT * FROM '. $wpdb->prefix.'postmeta' .' WHERE `post_id` = '.$patient->ID.' AND `meta_key` = \'pts_id\''); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A'.$i, $pts_id_row->meta_value) ->setCellValue('B'.$i, $patient->post_date); } } $objPHPExcel->getActiveSheet()->setTitle('Simple'); $objPHPExcel->setActiveSheetIndex(0); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit;
그리하여 출력된 파일의 결과는 다음과 같다.
마무리하며
워드프레스로 환자데이터베이스 만들면 다양한 장점이 있다.
- 첫번째는 백엔드를 거의 신경쓰지 않을 수 있으며,
- 무엇보다도 일단 기존의 테마를 이용하기 때문에 디자인에 크게 신경을 쓰지 않아도 된다.
- 소요시간을 획기적으로 줄일 수 있다.
- 이전에 작업할 때를 생각해보면 발주자가 뭔가 추가하고 싶은 데이터가 생기면, 그에 따른 모든 SQL구문까지 다 수정을 하고, 오류가 없는지, 오타는 없는지 확인해야 했는데 이런 부분에서 쓸데없는 시간 소요가 줄어드는 듯 하다.