Часто при работе с WordPress возникает задача быстро загрузить в сайт большой объем данных из таблиц Excel. Например, импортировать товары, посты или кастомные записи. В этой статье рассмотрим, как автоматически импортировать данные из Excel в WordPress без плагинов, используя чистый PHP и библиотеку PhpSpreadsheet, а также как оптимизировать процесс для больших файлов.
Почему стоит использовать импорт из Excel через код
Импорт через плагины удобен, но нередко ограничен по функционалу, скорости и гибкости. Для нестандартных задач, сложных структур данных или если нужно интегрировать импорт в свои сценарии, лучше написать собственный скрипт. Это даст полный контроль над процессом, позволит реализовать любую логику обработки и избежать избыточных ресурсов.
Кроме того, кодовый импорт легко автоматизировать — запускать по расписанию, через WP-CLI или по событию.
Для работы с Excel в PHP широко используется библиотека PhpSpreadsheet, которая поддерживает форматы XLSX, XLS, CSV и многое другое.
Установка PhpSpreadsheet и базовая подготовка
Для начала необходимо установить библиотеку через composer в корне проекта WordPress (если composer не используется, можно добавить вручную, но рекомендуется composer):
composer require phpoffice/phpspreadsheetДалее подключаем автозагрузчик в нашем файле импорта, например, в functions.php темы или в отдельном плагине:
require_once __DIR__ . '/vendor/autoload.php';Если вы не хотите использовать composer, можно загрузить PhpSpreadsheet с официального сайта и подключить вручную, но это менее удобно.
Пример функции импорта Excel в кастомные записи WordPress
Предположим, что у вас есть Excel с колонками: title, content, price, и вы хотите создавать на их основе кастомные записи типа product.
function wpcode_import_excel_to_products($file_path) {
// Подключаем классы
use PhpOffice\PhpSpreadsheet\IOFactory;
// Загружаем файл
$spreadsheet = IOFactory::load($file_path);
$worksheet = $spreadsheet->getActiveSheet();
// Проходим по строкам начиная со второй (первая — заголовки)
foreach ($worksheet->getRowIterator(2) as $row) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
$data = [];
foreach ($cellIterator as $cell) {
$data[] = $cell->getValue();
}
list($title, $content, $price) = $data;
// Создаем кастомный пост
$post_id = wp_insert_post([
'post_title' => sanitize_text_field($title),
'post_content' => sanitize_textarea_field($content),
'post_type' => 'product',
'post_status' => 'publish'
]);
if ($post_id && !is_wp_error($post_id)) {
update_post_meta($post_id, 'price', floatval($price));
}
}
}Эта функция открывает Excel, читает строки с данными и создает для каждой новую запись типа product, устанавливая мета-поле цены.
Оптимизации и обработка ошибок
Для больших файлов стоит обрабатывать импорт по частям, чтобы избежать превышения лимитов памяти и времени выполнения. Например, можно:
- Читать файл пакетами по 100 строк
- Использовать транзакции, если есть зависимые данные
- Записывать лог ошибок импорта
- Добавить проверки данных (валидация, фильтрация)
Пример разбивки на порции:
function wpcode_import_excel_chunked($file_path, $offset = 2, $limit = 100) {
use PhpOffice\PhpSpreadsheet\IOFactory;
$spreadsheet = IOFactory::load($file_path);
$worksheet = $spreadsheet->getActiveSheet();
$highestRow = $worksheet->getHighestRow();
$end = min($offset + $limit - 1, $highestRow);
for ($row = $offset; $row <= $end; $row++) {
$title = $worksheet->getCell('A' . $row)->getValue();
$content = $worksheet->getCell('B' . $row)->getValue();
$price = $worksheet->getCell('C' . $row)->getValue();
if (empty($title)) continue; // пропускаем пустые строки
$post_id = wp_insert_post([
'post_title' => sanitize_text_field($title),
'post_content' => sanitize_textarea_field($content),
'post_type' => 'product',
'post_status' => 'publish'
]);
if ($post_id && !is_wp_error($post_id)) {
update_post_meta($post_id, 'price', floatval($price));
}
}
}Автоматизация импорта через WP-CLI
Если вам нужно регулярно запускать импорт, удобно сделать WP-CLI команду. Это позволит запускать скрипт из командной строки, не нагружая фронтенд и не зависеть от HTTP-запросов.
Пример простой WP-CLI команды:
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('wpcode import_excel', function($args) {
$file_path = $args[0] ?? '';
if (!$file_path || !file_exists($file_path)) {
WP_CLI::error('Файл не найден');
}
wpcode_import_excel_to_products($file_path);
WP_CLI::success('Импорт завершен');
});
}Существующие плагины и их сравнение с кодовым решением
Для импорта из Excel есть популярные плагины, например WP Importer, которые позволяют загружать файлы через интерфейс и настраивать сопоставление колонок, но они не всегда подходят для уникальных бизнес-процессов.
Кодовый подход позволяет:
- Легко интегрировать с другими системами
- Автоматизировать без участия пользователя
- Внедрять сложную логику обработки, например, проверки, фильтры и синхронизацию
Если хотите простое решение — плагин подойдет. Если требуются кастомизация и масштабируемость — лучше код.
Выводы и рекомендации по импорту из Excel в WordPress
Импорт данных из Excel — частая задача, которую можно решить разными способами. Использование библиотеки PhpSpreadsheet и собственного PHP кода — надежное и гибкое решение для автоматизации импорта в кастомные типы записей или стандартные посты.
Не забывайте про:
- Валидацию данных
- Обработку ошибок
- Оптимизацию по памяти и времени
- Логирование для отладки
Для удобства запуска импорта отлично работает интеграция с WP-CLI.
Такой подход позволит создавать мощные и адаптируемые решения для любых бизнес-задач в WordPress.