Импорт данных из Excel в WordPress часто требуется для заполнения каталога товаров, создания базы клиентов или публикации таблиц с большим объемом информации. Обычно для этого используют плагины, но в некоторых случаях может понадобиться реализовать импорт самостоятельно, без сторонних расширений. В этой статье мы разберем, как сделать автоматический импорт Excel-файлов (.xlsx) в WordPress с помощью PHP-кода, используя библиотеку PhpSpreadsheet, и интегрировать это в ваш сайт.
Почему стоит делать импорт из Excel через код, а не плагины
Плагины для импорта удобны, но имеют ограничения по кастомизации и часто избыточны по функциям. При создании собственного решения вы получаете полный контроль над процессом, экономите ресурсы сайта и можете гибко обрабатывать данные по своим правилам. Это особенно актуально для уникальных бизнес-процессов или нестандартных структур данных.
Кроме того, самостоятельный импорт помогает интегрироваться с другими системами и автоматизировать задачи без участия пользователя — например, загружать новые данные по расписанию с помощью WP-Cron.
Основные шаги для реализации импорта Excel в WordPress
Для начала нужно:
- Установить библиотеку PhpSpreadsheet, которая позволяет читать Excel-файлы в PHP.
- Создать функцию, которая будет обрабатывать загруженный Excel и преобразовывать данные для записи в WordPress (например, в записи или пользовательские типы записей).
- Настроить загрузку файла и запуск функции импорта, например, через форму в админ-панели или по Cron.
Установка PhpSpreadsheet в WordPress проект
Если ваш сайт использует Composer, достаточно в корне проекта выполнить:
composer require phpoffice/phpspreadsheet
Если Composer не используется, можно загрузить библиотеку вручную с GitHub и подключить автозагрузчик в functions.php темы или плагина:
require_once __DIR__ . '/vendor/autoload.php';
Пример функции импорта Excel в записи WordPress
Предположим, у нас есть Excel с колонками: Заголовок, Содержимое, Категория. Нам нужно создать посты с этими данными.
function wpbegin_import_excel_to_posts($filePath) {
if (!file_exists($filePath)) {
return new WP_Error('file_not_found', 'Файл не найден');
}
// Подключаем PhpSpreadsheet
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load($filePath);
$sheet = $spreadsheet->getActiveSheet();
$rows = $sheet->toArray();
// Пропускаем заголовок таблицы
unset($rows[0]);
foreach ($rows as $row) {
list($title, $content, $category) = $row;
// Проверяем обязательные поля
if (empty($title) || empty($content)) {
continue;
}
// Создаем пост
$post_data = array(
'post_title' => sanitize_text_field($title),
'post_content' => wp_kses_post($content),
'post_status' => 'publish',
'post_type' => 'post'
);
$post_id = wp_insert_post($post_data);
if (is_wp_error($post_id)) {
continue;
}
// Добавляем категорию
if (!empty($category)) {
$term = term_exists(sanitize_text_field($category), 'category');
if ($term === 0 || $term === null) {
$term = wp_insert_term(sanitize_text_field($category), 'category');
}
if (!is_wp_error($term)) {
wp_set_post_terms($post_id, (int)$term['term_id'] ?? $term['term_taxonomy_id'], 'category');
}
}
}
return true;
}
Добавление загрузки файла и запуск импорта в админке
Для удобства можно добавить простую форму в админ-панель, чтобы загружать Excel и запускать импорт без FTP. Например:
add_action('admin_menu', function() {
add_submenu_page('tools.php', 'Импорт Excel', 'Импорт Excel', 'manage_options', 'wpbegin-import-excel', 'wpbegin_import_excel_page');
});
function wpbegin_import_excel_page() {
if (!current_user_can('manage_options')) {
wp_die('Доступ запрещен');
}
if (isset($_POST['submit']) && !empty($_FILES['excel_file']['tmp_name'])) {
$uploaded_file = $_FILES['excel_file']['tmp_name'];
$result = wpbegin_import_excel_to_posts($uploaded_file);
if (is_wp_error($result)) {
echo '<div class="notice notice-error"><p>' . esc_html($result->get_error_message()) . '</p></div>';
} else {
echo '<div class="notice notice-success"><p>Импорт завершен успешно.</p></div>';
}
}
echo '<form method="post" enctype="multipart/form-data">';
echo '<input type="file" name="excel_file" accept=".xlsx" required />';
echo '<input type="submit" name="submit" class="button button-primary" value="Импортировать" />';
echo '</form>';
}
Обработка ошибок и улучшения
При работе с реальными файлами стоит добавить более детальную валидацию данных и обработку ошибок. Например, логировать все неудачные записи, чтобы потом исправить их вручную.
Можно расширить функционал, чтобы поддерживать импорт в кастомные типы записей, добавлять произвольные поля (метаданные) или загружать изображения, указанные в Excel.
Для автоматизации регулярных импортов используйте WP-Cron, чтобы запускать функцию по расписанию, например, ежедневно или еженедельно.
Альтернативы: плагины и сервисы
Если вы всё же хотите использовать готовые решения, обратите внимание на плагины с поддержкой импорта из Excel, например, Clearfy Pro, который оптимизирует работу сайта и может помочь с импортом.
Также есть специализированные сервисы для интеграции Excel и WordPress, но они часто платные и требуют настройки API.
Выводы и рекомендации
Создание собственного решения для импорта Excel в WordPress без плагинов — это отличный способ получить гибкий и оптимизированный процесс загрузки данных. Использование PhpSpreadsheet позволяет работать с современными форматами .xlsx и легко адаптировать код под любые задачи.
Реализуйте удобный интерфейс загрузки в админке и продумайте обработку ошибок, чтобы импорт был надежным и удобным для пользователей.