Импорт данных из CSV — частая задача для сайтов на WordPress, особенно если нужно регулярно обновлять информацию из внешних источников. В этой статье разберём, как настроить автоматический импорт CSV-файлов в WordPress с помощью плагина WPTasks и собственного кода. Это позволит вам систематизировать процесс, минимизировать ручной труд и ускорить обновления контента.
Почему автоматизировать импорт CSV в WordPress?
Ручной импорт данных через админку WordPress или сторонние плагины — трудоёмкий и подверженный ошибкам процесс. Автоматизация помогает:
- Регулярно обновлять данные без вашего участия.
- Избегать ошибок при ручном копировании и вставке.
- Интегрироваться с внешними системами, где данные хранятся в CSV.
- Обрабатывать большие объёмы данных с минимальной нагрузкой на сайт.
WPTasks отлично подходит для управления подобными задачами благодаря функционалу планирования и автоматизации.
Подготовка к автоматическому импорту CSV
Выбор формата CSV и структура данных
CSV-файл должен содержать чётко структурированные данные: например, если импортируем товары, то колонки могут быть: название, цена, описание, категория, артикул. Убедитесь, что заголовки колонок понятны и не содержат лишних символов.
Создание пользовательского типа записи (Custom Post Type)
Для импорта данных лучше создать кастомный тип записи, чтобы не смешивать импорт с обычными постами или страницами. Пример регистрации типа записи task_item для WPTasks:
function wptasks_register_task_item_cpt() {
$labels = array(
'name' => 'Элементы задач',
'singular_name' => 'Элемент задачи',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'custom-fields'),
);
register_post_type('task_item', $args);
}
add_action('init', 'wptasks_register_task_item_cpt');Этот код добавьте в файл functions.php вашей темы или в отдельный плагин.
Чтение и обработка CSV файла в WordPress
Загрузка CSV и парсинг данных
Для чтения CSV используем встроенные функции PHP и WP API. Ниже пример функции для импорта:
function wptasks_import_csv($file_path) {
if (!file_exists($file_path) || !is_readable($file_path)) {
return 'Файл не найден или недоступен для чтения';
}
$header = null;
$data = array();
if (($handle = fopen($file_path, 'r')) !== false) {
while (($row = fgetcsv($handle, 1000, ',')) !== false) {
if (!$header) {
$header = $row;
} else {
$data[] = array_combine($header, $row);
}
}
fclose($handle);
}
return $data;
}Эта функция возвращает массив ассоциативных массивов, где ключи — заголовки CSV, а значения — данные строк.
Создание постов из данных CSV
Далее пройдёмся по массиву и создадим записи в WordPress:
function wptasks_create_posts_from_csv($data) {
foreach ($data as $item) {
// Проверяем, есть ли уже запись с таким же артикулом
$existing = get_posts(array(
'post_type' => 'task_item',
'meta_key' => 'sku',
'meta_value' => $item['sku'],
'posts_per_page' => 1
));
if ($existing) {
// Обновляем существующий пост
$post_id = $existing[0]->ID;
wp_update_post(array(
'ID' => $post_id,
'post_title' => sanitize_text_field($item['title']),
'post_content' => sanitize_textarea_field($item['description']),
));
} else {
// Создаём новый пост
$post_id = wp_insert_post(array(
'post_type' => 'task_item',
'post_title' => sanitize_text_field($item['title']),
'post_content' => sanitize_textarea_field($item['description']),
'post_status' => 'publish'
));
}
if ($post_id && !is_wp_error($post_id)) {
update_post_meta($post_id, 'price', floatval($item['price']));
update_post_meta($post_id, 'sku', sanitize_text_field($item['sku']));
update_post_meta($post_id, 'category', sanitize_text_field($item['category']));
}
}
}Автоматизация процесса с помощью WPTasks и WP-Cron
Настройка задачи в WPTasks
WPTasks позволяет создавать и запускать задачи по расписанию. Для автоматического импорта создадим задачу, которая будет запускать функцию импорта CSV.
Пример регистрации задачи в WPTasks:
function wptasks_schedule_csv_import() {
if (!class_exists('WPTasks')) {
return;
}
WPTasks::add_task('csv_import_task', 'Импорт CSV', 'wptasks_run_csv_import');
}
add_action('init', 'wptasks_schedule_csv_import');
function wptasks_run_csv_import() {
$file_path = WP_CONTENT_DIR . '/uploads/import/data.csv';
$data = wptasks_import_csv($file_path);
if (is_array($data)) {
wptasks_create_posts_from_csv($data);
}
}Запуск задачи через WP-Cron
Добавим запуск задачи по расписанию, например, каждый день в 3 часа ночи:
function wptasks_register_cron_event() {
if (!wp_next_scheduled('wptasks_daily_csv_import')) {
wp_schedule_event(strtotime('03:00:00'), 'daily', 'wptasks_daily_csv_import');
}
}
add_action('wp', 'wptasks_register_cron_event');
add_action('wptasks_daily_csv_import', 'wptasks_run_csv_import');Теперь импорт будет запускаться автоматически, без вашего участия.
Полезные советы и рекомендации
Обработка ошибок и логирование
Важно логировать процесс импорта, чтобы быстро выявлять и исправлять ошибки. Используйте встроенную функцию error_log или более продвинутые логгеры, например, Monolog.
Оптимизация производительности
При больших объёмах данных разбивайте импорт на партии — например, по 100 записей за раз. Используйте транзиенты или кеширование, чтобы не перегружать базу данных.
Безопасность и валидация данных
Всегда фильтруйте и валидируйте входящие данные, чтобы избежать SQL-инъекций и XSS-атак. Используйте функции WordPress для санитизации, как sanitize_text_field и sanitize_textarea_field.
Дополнительные плагины для расширения функционала импорта
Если хотите расширить возможности, рассмотрите плагины:
- Clearfy Pro — оптимизация и улучшение работы импорта.
- WPRemark — для автоматизации отзывов и комментариев, если импортируете отзывы в CSV.
Используйте эти инструменты в комплексе с WPTasks для максимальной автоматизации.