Часто при работе с WordPress возникает задача массовой загрузки данных из Excel-файлов — будь то товары, отзывы, пользователи или записи блога. Если вы хотите автоматизировать процесс импорта данных из Excel, но не хотите использовать громоздкие плагины с лишним функционалом, то в этой статье я расскажу, как создать собственное решение с помощью PHP и библиотеки PHPExcel (или её форка PhpSpreadsheet), интегрированное в WordPress и использующее возможности WPUnit для удобства и гибкости.
Почему автоматический импорт из Excel важен для WordPress
Excel — универсальный формат для хранения данных, который широко используют маркетологи, менеджеры и контент-менеджеры. Ручной ввод данных в админке WordPress занимает много времени и подвержен ошибкам. Автоматический импорт позволяет:
- Сэкономить время и силы на загрузке большого объема данных.
- Обеспечить точность и однородность данных.
- Интегрировать данные из внешних систем, которые экспортируют в Excel.
- Обновлять контент массово, не нарушая логику сайта.
WPUnit — это неофициальное название, которое я использую для префиксов функций, чтобы показать, что решение адаптировано под ваш сайт и легко масштабируемо.
Подготовка среды: установка PhpSpreadsheet и подключение к WordPress
Для работы с Excel-файлами в PHP рекомендуется использовать библиотеку PhpSpreadsheet. Она поддерживает форматы XLSX, XLS, CSV и другие. Если у вас нет composer на сервере, можно скачать библиотеку и подключить вручную.
Чтобы подключить PhpSpreadsheet в плагине или теме, создайте файл wpunit-import-excel.php в каталоге плагинов и добавьте следующий код для подключения автозагрузчика:
require_once __DIR__ . '/vendor/autoload.php'; // если используете composer
Если composer не используется, скачайте PhpSpreadsheet и подключите вручную нужные файлы.
Далее нужно создать функцию для обработки файла Excel, чтения данных и импорта в WordPress.
Чтение Excel и импорт данных: пример функции WPUnit_import_excel_data
Рассмотрим пример функции, которая читает Excel-файл и создаёт посты типа "product" с метаданными. В реальной задаче вы можете адаптировать тип записи и структуру метаданных под свои нужды.
use PhpOffice\PhpSpreadsheet\IOFactory;
function WPUnit_import_excel_data($file_path) {
// Загрузка файла
$spreadsheet = IOFactory::load($file_path);
$worksheet = $spreadsheet->getActiveSheet();
// Получаем максимальное число строк
$highestRow = $worksheet->getHighestRow();
for ($row = 2; $row <= $highestRow; ++$row) { // Предполагаем, что первая строка - заголовки
$product_name = $worksheet->getCell('A' . $row)->getValue();
$price = $worksheet->getCell('B' . $row)->getValue();
$description = $worksheet->getCell('C' . $row)->getValue();
if (empty($product_name)) {
continue; // пропускаем пустые строки
}
// Создаём новый пост типа product
$post_id = wp_insert_post([
'post_title' => wp_strip_all_tags($product_name),
'post_content' => $description,
'post_status' => 'publish',
'post_type' => 'product',
]);
if (!is_wp_error($post_id)) {
// Добавляем мета данные
update_post_meta($post_id, '_price', floatval($price));
}
}
}
Вызовите эту функцию, передав путь к вашему загруженному Excel-файлу. Для удобства можно сделать отдельную страницу в админке с формой загрузки файла и кнопкой запуска импорта.
Создание интерфейса загрузки Excel в админке WordPress
Чтобы сделать импорт максимально удобным для пользователя, создадим страницу настроек в админке, где можно загрузить файл и начать импорт.
function WPUnit_add_import_menu() {
add_submenu_page(
'tools.php',
'Импорт Excel',
'Импорт Excel',
'manage_options',
'wpunit-import-excel',
'WPUnit_import_excel_page'
);
}
add_action('admin_menu', 'WPUnit_add_import_menu');
function WPUnit_import_excel_page() {
if (!empty($_FILES['wpunit_excel_file']['tmp_name'])) {
$uploaded_file = $_FILES['wpunit_excel_file']['tmp_name'];
WPUnit_import_excel_data($uploaded_file);
echo '<div class="updated notice"><p>Импорт успешно завершен.</p></div>';
}
?>
<div class="wrap">
<h1>Импорт данных из Excel</h1>
<form method="post" enctype="multipart/form-data">
<input type="file" name="wpunit_excel_file" accept=".xlsx,.xls,.csv" required />
<input type="submit" class="button button-primary" value="Импортировать" />
</form>
</div>
<?php
}
Теперь в разделе "Инструменты" появится пункт "Импорт Excel", где вы сможете загружать файлы и запускать импорт без лишних усилий.
Расширение функционала: обработка ошибок и обновление данных
В реальном проекте важно предусмотреть обработку ошибок, проверку формата и обновление существующих записей. Например, можно добавить проверку на уникальность по названию или артикулу товара, чтобы не создавать дубликаты.
Пример проверки и обновления поста:
function WPUnit_get_product_by_name($name) {
$posts = get_posts([
'post_type' => 'product',
'title' => $name,
'posts_per_page' => 1,
'post_status' => 'any',
]);
return !empty($posts) ? $posts[0] : null;
}
// В цикле импорта
$product = WPUnit_get_product_by_name($product_name);
if ($product) {
// Обновляем пост
wp_update_post([
'ID' => $product->ID,
'post_content' => $description
]);
update_post_meta($product->ID, '_price', floatval($price));
} else {
// Создаём новый
$post_id = wp_insert_post([...]);
}
Также не забудьте добавить проверку nonce и права доступа при загрузке файла для безопасности.
Интеграция с плагинами WPSHOP для расширения возможностей
Если вы используете плагин WPRemark для отзывов, можно расширить импорт, загружая отзывы из Excel и прикрепляя их к товарам. Аналогично с WPStories — импортировать истории пользователей.
Это позволит собрать все данные из Excel и наполнить сайт качественным контентом без многоэтапной ручной работы.
Итоги и советы по автоматическому импорту Excel в WordPress
Автоматический импорт из Excel — мощный инструмент для ускорения работы с сайтом. Использование PhpSpreadsheet вместе с кастомными функциями WPUnit позволяет создать гибкое и адаптируемое решение без избыточных плагинов.
Основные рекомендации:
- Всегда проверяйте и валидируйте данные из Excel перед импортом.
- Добавляйте обработку ошибок и логирование для контроля процесса.
- Используйте уникальные идентификаторы для обновления существующих записей.
- Обеспечивайте безопасность загрузки файлов через nonce и проверку прав.
- Интегрируйте импорт с другими плагинами WPSHOP для расширения функционала.