wpcodes.ru wordpress WP Codеs

Как создать автоматический импорт контента в WordPress с фильтрами и обработкой

Автоматический импорт контента — частая задача при работе с WordPress, особенно если сайт регулярно получает данные из внешних источников, например, RSS, API или CSV-файлов. В этой статье подробно разберём, как создать собственный механизм импорта с возможностью фильтрации и обработки данных до их сохранения в базу.

Почему стандартные решения не всегда подходят для импорта

Существует множество плагинов для импорта: WP All Import, WP RSS Aggregator и другие. Однако у них часто ограниченные возможности кастомизации логики обработки данных, а также они могут быть избыточными для простых задач. Создавая собственный импорт, мы получаем полный контроль над процессом, можем добавлять фильтры, валидировать данные, преобразовывать перед записью.

Кроме того, собственный импорт легче интегрировать с другими кастомными функциями сайта, например, с пользовательскими метаполями, таксономиями или сторонними API.

Создание базового скрипта для импорта с фильтрацией

Рассмотрим пример импорта из CSV-файла с записью данных в кастомный тип записи wpcodes_product. Прежде всего, создадим функцию для чтения и обработки CSV:

function wpcodes_import_products_from_csv($file_path) {
    if (!file_exists($file_path)) {
        return new WP_Error('file_not_found', 'CSV файл не найден');
    }

    $handle = fopen($file_path, 'r');
    if (!$handle) {
        return new WP_Error('file_open_error', 'Не удалось открыть CSV файл');
    }

    $header = fgetcsv($handle);
    $imported_count = 0;

    while (($row = fgetcsv($handle)) !== false) {
        $data = array_combine($header, $row);

        // Фильтрация: пропускаем товары с нулевой ценой
        if (empty($data['price']) || floatval($data['price']) <= 0) {
            continue;
        }

        // Валидация: проверяем обязательные поля
        if (empty($data['title']) || empty($data['sku'])) {
            continue;
        }

        // Обработка данных перед сохранением
        $post_data = array(
            'post_title' => sanitize_text_field($data['title']),
            'post_type' => 'wpcodes_product',
            'post_status' => 'publish',
        );

        $post_id = wp_insert_post($post_data);

        if (is_wp_error($post_id)) {
            continue;
        }

        // Сохраняем метаданные
        update_post_meta($post_id, 'wpcodes_sku', sanitize_text_field($data['sku']));
        update_post_meta($post_id, 'wpcodes_price', floatval($data['price']));

        $imported_count++;
    }

    fclose($handle);
    return $imported_count;
}

В этом примере мы открываем CSV, читаем строки, фильтруем товары без цены и с пустыми обязательными полями, затем создаём записи и сохраняем метаполя.

Как вызвать импорт по расписанию с WP-Cron

Чтобы импорт запускался автоматически, можно добавить cron-задачу:

add_action('wpcodes_daily_import_event', 'wpcodes_run_daily_import');

function wpcodes_run_daily_import() {
    $file_path = WP_CONTENT_DIR . '/uploads/products.csv';
    $result = wpcodes_import_products_from_csv($file_path);
    if (is_wp_error($result)) {
        error_log('Импорт товаров не удался: ' . $result->get_error_message());
    } else {
        error_log('Импортировано товаров: ' . $result);
    }
}

// Регистрируем событие при активации темы/плагина
if (!wp_next_scheduled('wpcodes_daily_import_event')) {
    wp_schedule_event(time(), 'daily', 'wpcodes_daily_import_event');
}

Так импорт будет запускаться ежедневно, автоматически подтягивая новые данные.

Обработка ошибок и логирование

Важно вести журнал ошибок и действий импорта, чтобы быстро находить и исправлять проблемы. Можно расширить функцию, добавив логирование неудачных записей или уведомления по email.

Пример записи ошибки в отдельный лог-файл:

function wpcodes_log_import_error($message) {
    $log_file = WP_CONTENT_DIR . '/wpcodes-import-errors.log';
    $date = date('Y-m-d H:i:s');
    file_put_contents($log_file, "[$date] $message\n", FILE_APPEND);
}

Вызывайте эту функцию при ошибках в процессе импорта.

Использование плагинов для расширения возможностей импорта

Если хочется облегчить себе задачу, но сохранить гибкость, рекомендуем обратить внимание на плагин Clearfy Pro — он содержит оптимизации и возможности для работы с кастомным контентом, плюс инструменты безопасности, которые полезны при автоматических операциях с сайтом.

Также для визуализации импорта и управления можно использовать My Popup для уведомления админа о результатах импорта.

Заключение: советы по доработке импорта

1. Добавьте поддержку нескольких форматов (JSON, XML) — используйте соответствующие парсеры.

2. Реализуйте батчевую обработку для больших файлов, чтобы избежать таймаутов.

3. Добавьте возможность обновления существующих записей по уникальному полю (например, SKU).

4. Используйте транзакции и откаты при ошибках, чтобы не сохранять частично неконсистентные данные.

5. Тестируйте импорт на копии сайта, чтобы не повредить рабочую базу.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее