Для того чтобы выполнить экспорт данных в эксель, нужно подключить PHPExcel.php. Эту библиотеку нужно скачать, и загрузить в папку вашей темы.
Подключаем ее следующим кодом в functions.php вашей темы:
1 | require_once 'Classes/PHPExcel.php'; |
Далее нам нужно как то вызывать функцию экспорта, я использовал GET запрос:
1 2 3 | if (isset($_GET['excel-export'])) { } |
Так же нужно подумать о безопасности, например чтобы этот запрос мог выполнить только администратор:
1 2 3 | if (current_user_can('manage_options')) { } |
В примере я буду рассматривать экспорт данных пользователей, в принципе этот вариант можно переделать под свои нужды, т.к. он универсальный. Весь код запроса будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | if (isset($_GET['excel-export'])) { if (current_user_can('manage_options')) { add_action('init', function () { error_reporting(E_ALL); if (PHP_SAPI == 'cli') die('This example should only be run from a Web Browser'); require_once 'Classes/PHPExcel.php'; $objPHPExcel = new PHPExcel(); // Set properties $objPHPExcel->getProperties()->setTitle(esc_html__('Results', 'mytheme')); $objPHPExcel->getProperties()->setSubject(esc_html__('Results', 'mytheme')); $objPHPExcel->getProperties()->setDescription(esc_html__('Export users document for XLSX.', 'mytheme')); // WP_User_Query получаем пользователей по заданым критериям $args02 = array( 'role' => 'subscriber', 'order' => 'ASC', 'orderby' => 'display_name', 'fields' => 'all', ); // The User Query $blogusers02 = get_users($args02); $cell_counter = 1; // Закрашиваем фон у наших заголовков $objPHPExcel->getActiveSheet()->getStyle('A1:AM1')->getFill() ->setFillType(PHPExcel_Style_Fill::FILL_SOLID) ->getStartColor()->setARGB('a5b6ca'); // Подписываем столбцы $objPHPExcel->getActiveSheet()->SetCellValue('A1', esc_html__('Name', 'mytheme')); $objPHPExcel->getActiveSheet()->SetCellValue('B1', esc_html__('E-mail', 'mytheme')); $objPHPExcel->getActiveSheet()->SetCellValue('C1', esc_html__('Profession', 'mytheme')); $objPHPExcel->getActiveSheet()->SetCellValue('D1', esc_html__('Role', 'mytheme')); $objPHPExcel->getActiveSheet()->SetCellValue('E1', esc_html__('Description', 'mytheme')); // Собственно сам цикл: foreach ($blogusers02 as $user) { $cell_counter++; // Счетчик, он нужен для того чтобы был переход на следующую строку $meta = get_user_meta($user->ID); // Выборка данных с стандартных полей $role = $user->roles; $email = $user->user_email; // Выборка данных с кастомных полей $first_name = (isset($meta['user_first_name'][0]) && $meta['user_first_name'][0] != '') ? $meta['user_first_name'][0] : ''; $profession = (isset($meta['user_profession'][0]) && $meta['user_profession'][0] != '') ? $meta['user_profession'][0] : ''; $description = (isset($meta['user_description'][0]) && $meta['user_description'][0] != '') ? $meta['user_description'][0] : ''; // Заполняем ячейки таблицы $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->SetCellValue('A' . $cell_counter . '', $first_name); $objPHPExcel->getActiveSheet()->SetCellValue('B' . $cell_counter . '', $email); $objPHPExcel->getActiveSheet()->SetCellValue('C' . $cell_counter . '', $profession); $objPHPExcel->getActiveSheet()->SetCellValue('D' . $cell_counter . '', $description); } // Устанавливаем автоматическую ширину для ячеек for ($col = 'A'; $col !== 'D'; $col++) { $objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true); } // Даем имя вкладке $objPHPExcel->getActiveSheet()->setTitle(esc_html__('Results', 'mytheme')); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="SbmChampions2019Survey.xlsx"'); header('Cache-Control: max-age=0'); // Сохраняем файл $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit(); }); } } |
В результате будет сохранен документ эксель на вашем пк с данными пользователей.
В принципе вместо выборки данных пользователя, можно выбирать все что угодно, будь то страницы, посты или товары, и подставлять нужные данный.
Если же нужно получить документ с двумя и более вкладками, то нужно написать следующий код после кода переименования первой вкладки:
1 2 | $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex(1); |
Этот код создает новую вкладку и делает ее активной.